The KeyWiz FAQ
- What is the KeyWiz ?

- What is the KeyWiz used for?

- What exactly is the Shazaaam! Key feature?

- So how do I use this Shazaaam! Key ?

- Does the KeyWiz support Key Repeat?

- Is the KeyWiz a Game Control Device?

- How do I switch between the Custom Codeset and the Default definitions "on-the-fly"?

- How do my switches hook to the KeyWiz? Can the "on-the-fly" switching be disabled? Can I make my own "1-button Shazaaam! combo" adapters?

- How is the KeyWiz better than hacking a real keyboard?

- How is the KeyWiz(tm) better than hacking a joystick/gamepad?

- Is there a USB version available? Will there be one?

- Why isn't there an integrated keyboard pass-through?

- So what is this "Single Button Test" you keep talking about and why such a large buffer?

- Can I use the KeyWiz to monitor or control my insulin pump / pacemaker / nuclear power plant?



































What is the KeyWiz(tm)?


The KeyWiz, in short, is a Hardware-based Keyboard Emulation Device.....on steroids!





What is the KeyWiz(tm) used for?

This is best answered with a couple of other questions. Have you ever used your keyboard with a piece of software on your PC and thought "Man, I wish I could hook some real controls, like buttons or sticks to those switches under the keys"? And then, after you tear apart your keyboard you find no switches, but a couple pieces of flimsey plastic and a tiny gob of silicon with nothing to solder to?

Or maybe you have been playing a game with a commercial joystick/gamepad and thought "I can make a better control than this". Then after ripping into the beastie you find that you need to connect 2 wires for every switch (that is if you can solder onto the tiny little points) and after all the work, you still have to deal with the drivers and possible OS incompatibilities. Of course, that is if you didn't mess up something and it even works at all.

Or maybe you just want an easy way for any external switch-based device, like limit-switches or controls for machinery, to communicate with your software?

The KeyWiz is the solution to these problems.






What exactly is the Shazaaam! Key(tm) feature?

The Shazaaam! Key allows KeyWiz inputs to have a secondary keycode. This means that, in total, the KeyWiz can send almost twice as many unique keycodes (if there were that many), using a control panel having a sane number of control sticks and buttons. The Shazaaam! Key also does not inhibit the use of any of the KeyWiz inputs in any way. All normal inputs are always available to interface to your controls. The Shazaaam! Key combos activate on key-down, and you can even press multiple keys at the same time!





So how do I use this Shazaaam! Key(tm)?

First of all, you need to plan for a button or switch that will activate the Shazaaam! Key feature. This can be on top of your panel for easy access, or hidden from view if you don't want normal users to access it. After that, using the Shazaaam! Key is simple. Just as you would hold down the shift, control or alt keys on a normal keyboard, you simply hold down the Shazaaam! Key (or flip the switch) and press a button. The KeyWiz then sends the alternate keycode for the button pressed.

Another innovative way to use the Shazaaam! Key, already being copied by the competition, is with the use of an inexpensive diode-based adapter that will allow any switch to send a Shazaaam! keycode with a single press. This lets KeyWiz provide secondary switches for non-primary functions in addition to the primary control inputs. The Shazaaam! Key works with both the default MAME-compatible set as well as custom control sets for your own key definitions. The Shazaaam! Key also plays a part in another awesome KeyWiz feature (PS/2 Version Only). See the Custom Codeset Switching section of this FAQ.






Does the KeyWiz(tm) support Key Repeat?

Absolutely! Anyone who has tried to scroll through a long list of selections with a control stick will tell you just how important this feature is. Without Key Repeat, you would have to push your control stick in a direction and let it return to center every time you wanted to move to another item. If your list is 1000 items in length, you would have to do this 1000 times! Key Repeat lets you just hold the stick to effortlessly scroll through even the largest lists. What's more, Key Repeat also works with Shazaaam! Key combinations! Holding down the Shazaaam! Key and buttons defined as page up or page down will get you through the largests lists in seconds! And best of all, the Key-repeat is controlled by your software, just like a real keyboard, for maximum performance and compatibility!





Is the KeyWiz(tm) a Game Control Device?

Absolutely not. This would be like calling the CD-ROM drive in your computer a "music playing device". Like the CD-ROM drive in your computer, the KeyWiz was designed with many purposes in mind (playing music wasn't one of them, but it'd make a nice way to control a home-made jukebox!) Great effort was made to make KeyWiz one of the highest-performance keyboard emulation devices available, making it an excellent choice for just about any application. However, by popular demand, we have made the default keycodes compatible with MAME defaults. We expect that this will make gamers very happy using the KeyWiz in that application. Obviously, since the KeyWiz is just outputting keyboard keys, the default codeset can be used for any application which allows for internal function key re-assignment. But for those wishing to have a different default set in firmware, the USB version allows for saving to TRUE EEPROM, which means your definitions will be active through power cycles.





(PS/2 Version Only) How do I switch between the Custom Codeset and the Default definitions "on-the-fly"?

This is an easy one. Just hold down the Shazaaam! Key and move your #1 control stick left or right. Moving the stick to the left selects the default MAME-compatible definitons, and moving it to the right selects the Custom Codeset definitions. No jumpers to change, ever.





How do my switches hook to the KeyWiz? Can the "on-the-fly" switching be disabled? Can I make my own "1-button Shazaaam! combo" adapters?

These answers and more can be found in the Wiring Diagrams Page. There you will find normal and advanced wiring methods that will allow you to get the most out of your KeyWiz.




How is the KeyWiz(tm) better than hacking a real keyboard?

The obvious physical limitations aside, a conventional keyboard typically has over 101 keys that it must constantly monitor. However, the poor little chip inside typically only uses around 27 lines of communication to the outside world. This means that the processor has to use a "matrix scanning" method to decide which key has been pressed. If you've ever played a portable electronic chess game, you know what a matrix is. The chess board is an example of a matrix. A7 to B4....Bleah!

The matrix scanning method has a number of nasty drawbacks when used for for monitoring switches for uses other than keyboard keys. The first one is performance. In a normal keyboard, the cpu has to check each and every one of the 100+ switches to see if it has been pressed or released. The code to do this on a matrix is much more complex and time consuming than the method used on the KeyWiz. The KeyWiz uses a proprietary, interrupt driven, sequential-snapshot method for scanning external events. This gives KeyWiz the raw speed and accuracy required in the most demanding applications.

The next problem with a matrix is phantom keys. Simultaneously pressing 3 keys that form a right triangle on the matrix, electrically activates a 4th unpressed key at the corner where the right triangle would become a square (You would have to see a picture to really understand this). This means extra, unintended keypresses and possibly stuck keys. The KeyWiz does not use a matrix and therefore will never have this limitation.

Another problem with a matrix is the keyboard manufacturers solution to the last problem. Most modern keyboard manufacturers use a method known as "Blocking" to prevent the phantom key scenario. The code in a normal keyboard chip senses when the 3rd key held down would form the right-triangle pattern on the matrix and then won't allow that key to be sensed. This results in being able to press only a few keys simultaneously on most keyboards. The KeyWiz can sense pressing of all 32 keys at the same time, with no "blocking." (Truth in advertising addition: That test was done before the addition of the Shazaaam! Key feature. Currently KeyWiz can sense 31 keys at the same time due to technical reasons related to the workings of the Shazaaam! Key)

Aside from the matrix problem, most real keyboards are not programmable (some are, but these tend to be rare). Suppose you wanted the "Q" key on a normal keyboard to send "ESCAPE" to the PC. Not so easily done. The Custom Codeset feature of the KeyWiz allows you to program which codes are sent to the PC when a button is pressed.

And finally, the shift key on a normal keyboard just sends an upper-case version of the key you pressed with it. Since most software won't recognize the difference between lower-case and upper-case, this isn't very useful. The KeyWiz solves this with the Shazaaam! Key(tm) feature. See the Shazaaam! Key section in this FAQ for details.





How is the KeyWiz(tm) better than hacking a joystick/gamepad?

Have you ever looked inside one of those things??? Seriously, the board in a normal game controller is pretty small and the original designers didn't make it with the intention of you going in there with your soldering iron. Because of the way they are designed, most of the time you need two distinct connections to the gamepad's circuit board for every external switch you intend to hook to it. That equates to a lot of effort (and wires!) The KeyWiz uses a simple ground bus, which means that for each button, you only need to hook one easy to connect wire to one of the KeyWiz's inputs, and connect to an adjacent button's ground bus wire. Cleaner installations means fewer problems and easier troubleshooting.

If you do manage to get a gamepad hack working, there are other problems. Many pieces of software don't allow the use of gamepads to navigate menus and other necessary functions. Some don't support a gamepad at all! (although this has improved greatly over the years) The keyboard is the default control option for virtually all PC based software, and when it's not, it is usually an option. As the KeyWiz makes the PC think it is a normal keyboard, it has the extremely high compatibility.

Then there are the driver issues. Some gamepads come with "keyboard emulation drivers" to get past some of these issues. These work reasonably well, but there can be perfomance and compatibility issues due to the extra software layer. These also tend to work only under a Windows OS, so it won't help if you are in a different OS. The KeyWiz performs it's keyboard emulation entirely in hardware.

And finally, if you want a whiz-bang control panel with all the options under the sun, a gamepad just won't have enough inputs. The KeyWiz has up to 5 times as many connections available for external controls (depending on model.)






Is there a USB version available?

Yes! For a long time, limitations in common microcontrollers used for USB keyboards were only capable of sensing a maximum of 6 simultaneous keypresses (6KRO), which are plenty in that application. Most standard USB Keyboards still have this limitation. Most manufacturers of USB based keyboard emulation devices based on similar devices, who state they have overcome this hurdle don't actually state how many simultaneous keypresses their product can handle. Our knowledge of the hardware used in these types of devices and the limitations of the USB Keyboard leads us to believe that the number is approximately 12 to 14.

The KeyWiz USB smashes through this limitation by using NKRO (No Key Roll Over) technology. This means that just like the PS/2 version, there is no limit on the number of simultaneous keypresses.






Why isn't there an integrated keyboard pass-through?

The PS/2 version of the KeyWiz MAX(tm) is the only KeyWiz product that offers an option for attaching an external keyboard, and that is activated via an electronic switch, with a dedicated IC for this function. This model has an extra input and the keyboard is toggled by a user-supplied pushbutton. One reason we chose this is in line with the design philosophy of high performance. A good analogy is "You don't put air conditioning in a race car." Integrated keyboard pass-throughs mean the processor has to concern itself with collection and packaging of the data from the external keyboard, possibly interfering with it's primary purpose of processing the external switch events and sending codes to the PC as quickly as possible. It also means that 2 of the inputs are no longer available for your controls. The driving philosophy of the KeyWiz was to make every possible data line on the processor available for user controls and to not bother the CPU with any task not related to the efficient processing of those controls. The switch method isolates the external keyboard from the cpu, which means that both cannot be used at the same time. But that's a good thing! That keeps that annoying buddy (we all know him) from mashing the keys on the keyboard and messing up your game!

Another consideration is that once a system is configured for use with an external control panel, there is usually little need to continue using a keyboard. If your system is connected to a LAN, it becomes even less important. The software for setting up and programming the KeyWiz is entirely mouse/trackball driven and requires no keyboard to be present.

And finally, for those that want to take advantage of the high-performance nature of the KeyWiz, but absolutely must have a real keyboard usable at the same time, we recommend an inexpensive USB keyboard or PS/2 to USB adapter for your existing keyboard. This site will also offer USB keyboards to those users at a very reasonable cost.






(PS/2 Version)So what is this "Single Button Test" you keep talking about and why such a large buffer?

This is the test method we devised to gauge the performance of the PS/2 KeyWiz during development. This test was performed by disabling the Shazaaam! Key feature (we had to, as it "borrows" an input line and we needed all of them) and connecting 32 input lines to a single button. But before we go any further a brief description of the PS/2 keyboard protocol is in order.

The PS/2 keyboard protocol requires a character to be sent for a key to turn "on" and 2 charcters for it to turn "off" meaning 3 characters for each on-off transition. Some keys, like the arrow keys, require 2 for on and 3 for off, meaning 5 characters per key transition!

As you can see, a 16 character buffer has a very real chance of overflowing when many rapid and simultaneous keypresses occur, especially when some of those keys are the commonly used arrow keys. When a buffer overflow occurs, the cpu can no longer track whether a key that was recently turned "on" should be turned "off", as the code to do this might have been lost in the overflow. This results in a "stuck" key. One way to remedy this is by monitoring the number of characters in the buffer and preventing any new characters from being added when it is full. This has the same net efffect as the undesireable "blocking" behaviour on standard keyboards. The KeyWiz has taken a much smarter approach by using a very large (72 character) circular buffer.

Now the results of the test. Using GhostKey to monitor the results, we found that it took well over 500 characters per second before a stuck or missed key was shown with the KeyWiz. This would absolutely never occur in actual use as one would have to have to have 32 individual buttons and enough people to press each button 4 times a second in exact unison :). We feel that the large buffer approach is much more accurate and efficient solution as the KeyWiz doesn't have to try to prevent problems that won't occur.





Can I use the KeyWiz(tm) to monitor or control my insulin pump / pacemaker / nuclear power plant?

What are you, nuts???? There's one class of applications that you should NEVER use KeyWiz for. That is depending on it for sustaining or protecting your life or the lives of others around you. KeyWiz is not classified as a fault tolerant device and should NEVER be used where this is a requirement (or even desireable!) You wouldn't (I hope) trust your life or valuable property to your computer's five dollar keyboard, so don't trust it to KeyWiz!






All Contents of this site are Copyright 2003-2021 - Ithaca Digital Visual Technologies, Inc.
No portion of this site may be reproduced without permission. - All Rights Reserved.