Jump to content

Build a ROM with different keyboard layouts


lamb-duh
 Share

Recommended Posts

The x16-rom source tree includes a fairly large collection of keyboard layouts (presumably sourced from elsewhere? I could not find attribution) but can only build 12 into ROM. Here is what you need to do to build a ROM with different layouts.

What you need

- git

- python3

- cc65 (old versions without x16 cfg files work)

I have done this on Linux. The build process is incredibly straight-forward, I imagine it will build anywhere those tools will run.

Clone & Checkout

$ git clone https://github.com/commanderx16/x16-rom.git

$ cd x16-rom

$ git checkout r38

Replacing "r38" with the version of the emulator you are using (or a different version at your own discretion).

Choose Layouts

$ cd keymap/

The `klc` directory contains all available keyboard layouts. Make a note of which keyboards you wish to add to the ROM. Only the first part of the file name is needed. Eg. "klc/80A Latin American.klc" is identified by "80A".

Add these to the first line of the file `make_keytab_asm.sh` (in the variable `layouts`). Layouts that will be removed from the ROM do not need to be changed here, and this list does not need to be in any order.

Execute that script,

$ ./make_keytab_asm.sh

NB some keyboard layouts that do not produce any printable characters on the x16 will produce an error and empty output files. Other layouts that do not produce any printable characters will not produce an error. Keep in mind that all keyboard layouts will produce no output for any characters not available in PETSCII or 8859.

Edit `keymays.s`.

This file specifies which keymaps will make it into the final rom and in what order they will be cycled through. Under the comment, "; PETSCII", modify the list of includes to match your own keyboard layout. Each line should be of the form `.include "asm/___.asm"` with the same identifier in the blank. Keyboard layouts you no longer want can be removed by removing the `.include` line. There should be at least one layout and no more than 12.

Following this section, a similar list appears under the comment "; ISO". This list should match the petscii list except that each filename is of the form "asm/i___.asm".

Build the ROM

$ make

If successful, the useable rom is in the file "build/x16/rom.bin". To use this rom in the emulator, either replace the "rom.bin" in the same directory as the emulator, or specify the ROM on the command line with `x16emu -rom custom-rom.bin`

  • Like 1
Link to comment
Share on other sites

  • 7 months later...

There is a problem. When I execute ./make_keytab_asm.sh klc/40E\ Hungarian.klc it's just saying errors like this: 

UnicodeEncodeError: 'charmap' codec can't encode character '\xa2' in position 0: character maps to <undefined>
Traceback (most recent call last):
  File "C:\Users\danra\x16-rom\keymap\klc_to_asm.py", line 471, in <module>
    print("; chars: " + pprint.pformat(petscii_chars_not_reachable))
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1776.0_x64__qbz5n2kfra8p0\lib\encodings\cp1250.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
Do you know how to fix this?

Link to comment
Share on other sites

13 minutes ago, Arctica said:

There is a problem. When I execute ./make_keytab_asm.sh klc/40E\ Hungarian.klc it's just saying errors like this: 

UnicodeEncodeError: 'charmap' codec can't encode character '\xa2' in position 0: character maps to <undefined>
Traceback (most recent call last):
  File "C:\Users\danra\x16-rom\keymap\klc_to_asm.py", line 471, in <module>
    print("; chars: " + pprint.pformat(petscii_chars_not_reachable))
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1776.0_x64__qbz5n2kfra8p0\lib\encodings\cp1250.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
Do you know how to fix this?

See https://www.python.org/dev/peps/pep-0528/ ... the problem is that you are running on Windows and the default character encoding used by the console is code page 1250. You need to switch to Unicode so that the program can convert unicode characters to something that can be displayed. Or so I infer from the provided information. I am not an expert on getting Python to communicate via the Windows console.

Edited by Scott Robison
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

Please review our Terms of Use