Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Amstrad CPC keyboard layout has wrong and missing keys. #3

Open
cpcitor opened this issue Dec 25, 2017 · 2 comments
Open

Amstrad CPC keyboard layout has wrong and missing keys. #3

cpcitor opened this issue Dec 25, 2017 · 2 comments

Comments

@cpcitor
Copy link

cpcitor commented Dec 25, 2017

Hello. Came here from a Amstrad CPC forum where ep128emu was mentioned.
Interesting emulator indeed, with some functions I never saw like tape partial rewind etc.

Summary

Running the emulator works fine, but many keys are not mapped and some are wrongly mapped.

Not being able to easily type a quote " makes it difficult to even run any software.

System here is Ubuntu 16.04 AMD64 with french keyboard layout.

Details

Letter keys all work and conform to a translated mapping (rather than positional).
Translated or positional key mapping is a matter of emulation policy and I think both are valid and best one depends on emulated application (typically: positional for games where relative positions are what matters, also positional for CPC masters who type with muscle memory instead of looking at their keyboard, translated for other cases including text entry and programming).

Local keyboard layout near-exactly matches main area of image below.
PC Keyboard
One difference is key is physically one row below (right of ù% instead of right of ).

For reference, CPC6128 keyboard layout:
CPC keyboard

Anyway here is the result of systematic testing with my physical keyboard.

  • Top letter row: azertyuiop are ok, ^ and $ don't yield anything (same with shift).
  • Second letter row: qsdfghjkl are okay, ù * don't yield anything (same with shift).
  • Third letter row, expected <wxcvbn,;:! without shift, >WXCVBN?./§ with shift.
    • < yields nothing (same with shift)
    • wxcvbn,; are okay
    • : ! don't yield anything (same with shift, would expect / §)
    • , with shift yields < instead of ?
    • ; with shift yields + instead of .
  • Figure row (above top letter row) without shift, expected: &é"'(-è_çà)=
    • only - (on key 6) is okay
    • ' (on key 4) yields :
    • others don't yield anything.
  • Figure row (above top letter row) with shift, expected: 1234567890°+
    • nothing is okay
    • ' (on key 4) yields *
    • - (on key 4) yields =
  • Pressing right shift on host keyboard makes emulated CPC believe that little Enter key was pressed.
  • F0-F9 keys don't map to CPC's F0-F9 as expected.
  • Cursor keys work but Copy could not find copy key.
  • These keys work: Ctrl, Caps Lock, Tab

Actions attempted

  • Manually defining keyboard map allows to fix some issues (Menu Options -> Keyboard map).
  • Menu Options -> Keyboard map shows a physical layout of EP128 which does not match Amstrad CPC and in particular lacks some keys, which does not allow to redefine them: Clr, Copy, KeyPad-., F7, F8, F9.

Directions for improvement?

  • First goal would be a translated French configuration that just works. Using "configure keyboard map" feature with keys that are shown will help. I'm okay with the idea of manually editing a keyboard layout map previously saved as ASCII, but I don't know how to deal with the missing keys (Copy, etc).
  • Second possible goal: it may make sense that when emulating an Amstrad CPC, ep128emu shows in "configure keyboard map" window a Amstrad CPC layout instead of the EP128.
  • Perhaps support both translated and positional key layout. But to be sane, the internal logic probably has to be different. For example, positional logic is expected to be only dependent on host physical layout (key positions and shapes), disregarding symbols drawn on keys (and thus software-level language-dependent layout). On the other hand, translated layout is definitely different depending on keyboard language (both host and emulated).

With such improvements, IMHO ep128emu has some potential for a wider user base.

What do you think? First step could be to hint me at how to get Clr, Copy, KeyPad-., F7, F8, F9 working by manually editing a ASCII keyboard configuration file.

Thanks a lot for your attention.

Additional information

Compiling from this commit:

commit 83464098133753c55172570a4034c792bdb30cea
Author: IstvanV <[email protected]>
Date:   2017-02-22 12:59:01 +0100
@istvan-v
Copy link
Owner

Hello, sorry about the late reply, there seem to be two issues, first, the keyboard emulation for the non-Enterprise machines is a translation layer that maps Enterprise keys to Spectrum, CPC and TVC keys, this would not be easy to change. Second, there is no preset configuration file for French keyboards yet, only English and Hungarian, this affects all machines and is probably the reason why there are missing keys. You can configure the keyboard layout manually (Alt + I), it is possible however that correct support for French may also require workarounds in the code.

The mapping of CPC keys to Enterprise keys is as follows:

  • whenever possible, the mapping is to the Enterprise key with similar function or name, regardless of position
  • F1 to F8: mapped to the Enterprise function keys (blue)
  • F0 is Pause
  • F9 is Stop (red)
  • Copy is Insert
  • F Dot is Alt
  • Clear is Delete
  • Delete is Erase

This layout is probably not intuitive, but it should be possible to create a map where each French PC key is translated to the position wise matching CPC key. The only issue is that the numeric keyboard is used for emulating the external joysticks by default, it can be mapped to anything, however.

@istvan-v
Copy link
Owner

I made an attempt at creating a French CPC keyboard map, on Linux with a US keyboard switched to FR layout. This is not perfect, as I suspected, some keys do not work correctly because they are interpreted by X or FLTK in a special way.

CPC_Keyboard_FR.txt

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants