As of version 1.4, the hardware is now licenced under CERN OHL v.1.2 instead of being implicitly covered by the GPL. In addition, software and firmware have now been licensed under GPLv3 instead of GPLv2. See Licensing for details.

This release features some major improvements to usability, most notably the new utility commands “configure” and “update”, which allow transferring the configuration and doing firmware updates without having to use avrdude. See the relevant sections for transferring the configuration and updating the firmware on the project page.

Another improvement has been made to the syntax of the type command. It is now possible to type any PETSCII code that can also be typed on a real C64 keyboard. See the updated documentation. Note that the use of the tilde character for RETURN has been deprecated in favor of the \r escape sequence, so you will have to adjust your existing configuration.

It is now possible to map a control line to a key, where the line acts as an active low input which causes the specified key to be pressed on the keyboard. See the new map command.

A keybinding can now be protected from accidental use by requiring more than one press of the key before actually executing the bound command sequence. See the new directive requires.

The serial interface has also been sanitized. The command is now transferred as a byte, and a command can receive more than one argument byte. A map command has been added to allow creating and/or changing existing mappings on the fly.

For a detailed list of changes and update instructions, please see the remainder of this post by clicking on the “more” link below.

As always, please refer to the project page for detailed documentation.

Changelog for version 1.4


  • Hardware is now licensed under CERN OHL v1.2
  • Software and Firmware are now licensed under GNU GPLv3
  • V-USB driver has been properly sublicenced under GPLv3, see README.txt for details


  • Reconfigured to create a working bootloader again
  • Modified to allow a reset from firmware that does not trigger the bootloaderCondition() (using a magic value at the end of Eeprom).


  • Added “configure” command to the configuration utility, allowing to directly convert and flash a configuration file to eeprom via USB, without having to use avrdude and without having to enter the bootloader beforehand
  • Added an “update” command that can be used to update the firmware, likewise without requiring avrdude and manual bootloader entry
  • Changed string literal syntax to allow typing all PETSCII characters that can be typed on a real keyboard using the “type” command
  • Introduced escape sequences \r, \n, \f (return, newline, form feed), \xhh and \x{ddd} numeric sequences, deprecated use of ~ for return
  • Changed serial interface, using byte instead of nibble for commands
  • Allow serial interface commands with more than one argument
  • Added command to map a control line as active-low input to trigger a user defined key press, i.e. ability to add additional “keys”
  • Added serial interface command to create/change mappings directly
  • Added directive to require more than one invocation of a keybinding before actually executing bound commands
  • Added command “version” to type out embedded firmware version info
  • Added command “status” to type out current control port status
  • Added client option –identify to fetch firmware info via USB
  • Added key name SHIFT as a synonym for LEFTSHIFT
  • Eliminated bogus USB error message when entering bootloader via USB
  • Removed possibility of random cursor movement while executing long running intial commands
  • Fixed client exit code when failing to open USB device
  • Improved build system, added example.conf
  • Improved fallback configuration


The client utility, the bootloader and the firmware need to be upgraded in lockstep. The easiest way to do this is to flash the combined application and bootloader hex or bin file to the Atmega using an external programmer. Then recreate and reflash your configuration to eeprom memory.

If you don’t have a programmer, you will need to upgrade using the following procedure:

  1. Install the new command line utility

  2. Enter the bootloader, e.g. by running

    keyman64 boot

  3. Install the updater application for the bootloader:

    avrdude -p m1284p -c usbasp -U flash:w:keyman64-bootloader-updater-1.4.hex:h

  4. Wait a few seconds to allow the update of the bootloader to finish

  5. Press the reset button on the Keyman64 while holding down the boot button to manually enter the bootloader.

  6. Recreate and reflash your configuration:

    keyman64 convert keyman64.conf keyman64.bin
    avrdude -p m1284p -c usbasp -U eeprom:w:keyman64.bin:r

  7. Enter the bootloader again as described in 5.

  8. Reinstall the keyman64 application:

    avrdude -p m1284p -c usbasp -U flash:w:keyman64-application-1.4.hex:h

In addition, all existing “type” commands using the tilde character (~) for return will need to be adjusted, i.e. replace tilde with \r.

The serial interface now expects a complete byte for the command instead of a nibble. The provided serial.asm file has been adjusted accordingly, clients using the interface will have to be rebuild/adjusted as well.