1
0
mirror of https://github.com/TomHarte/CLK.git synced 2025-11-02 02:16:18 +00:00

Avoid ambiguity with new DelaySlot 'key'.

This commit is contained in:
Thomas Harte
2025-09-30 21:23:30 -04:00
parent 3ab3f34bef
commit a4e66f291a
7 changed files with 15 additions and 9 deletions

View File

@@ -49,7 +49,7 @@ enum class BBCKey: uint16_t {
//
// Break; a key, but not on the keyboard matrix.
//
Break = 0xfffd,
Break = 0xfffc,
//
// Master only keys.

View File

@@ -10,7 +10,7 @@
using namespace Electron;
uint16_t KeyboardMapper::mapped_key_for_key(Inputs::Keyboard::Key key) const {
uint16_t KeyboardMapper::mapped_key_for_key(const Inputs::Keyboard::Key key) const {
#define BIND(source, dest) case Inputs::Keyboard::Key::source: return Electron::Key::dest
switch(key) {
default: break;
@@ -70,7 +70,7 @@ uint16_t KeyboardMapper::mapped_key_for_key(Inputs::Keyboard::Key key) const {
return MachineTypes::MappedKeyboardMachine::KeyNotMapped;
}
const uint16_t *CharacterMapper::sequence_for_character(char character) const {
const uint16_t *CharacterMapper::sequence_for_character(const char character) const {
#define KEYS(...) {__VA_ARGS__, MachineTypes::MappedKeyboardMachine::KeyEndSequence}
#define SHIFT(...) {KeyShift, __VA_ARGS__, MachineTypes::MappedKeyboardMachine::KeyEndSequence}
#define CTRL(...) {KeyControl, __VA_ARGS__, MachineTypes::MappedKeyboardMachine::KeyEndSequence}
@@ -148,6 +148,6 @@ const uint16_t *CharacterMapper::sequence_for_character(char character) const {
return table_lookup_sequence_for_character(key_sequences, character);
}
bool CharacterMapper::needs_pause_after_key(uint16_t key) const {
bool CharacterMapper::needs_pause_after_key(const uint16_t key) const {
return !is_modifier(Key(key));
}

View File

@@ -32,7 +32,7 @@ enum Key: uint16_t {
// Virtual keys.
KeyF1 = 0xfff0, KeyF2, KeyF3, KeyF4, KeyF5, KeyF6, KeyF7, KeyF8, KeyF9, KeyF0,
KeyBreak = 0xfffd,
KeyBreak = 0xfffc,
};
constexpr bool is_modifier(const Key key) {

View File

@@ -44,7 +44,7 @@ enum Key: uint16_t {
KeyF8 = 0xfff5,
// Physical keys not within the usual matrix.
KeyRestore = 0xfffd,
KeyRestore = 0xfffc,
};
struct KeyboardMapper: public MachineTypes::MappedKeyboardMachine::KeyboardMapper {

View File

@@ -137,6 +137,12 @@ public:
*/
static constexpr uint16_t KeyNotMapped = 0xfffe;
/*!
Indicates that a key is not mapped (for the keyboard mapper) or that a
character cannot be typed (for the character mapper).
*/
static constexpr uint16_t DelaySlot = 0xfffd;
/*!
Allows individual machines to provide the mapping between host keys
as per Inputs::Keyboard and their native scheme.

View File

@@ -31,8 +31,8 @@ enum Key: uint16_t {
KeyEquals = 0x0700 | 0x80, KeyReturn = 0x0700 | 0x20, KeyRightShift = 0x0700 | 0x10,
KeyForwardSlash = 0x0700 | 0x08, Key0 = 0x0700 | 0x04, KeyL = 0x0700 | 0x02, Key8 = 0x0700 | 0x01,
KeyNMI = 0xfffd,
KeyJasminReset = 0xfffc,
KeyNMI = 0xfffc,
KeyJasminReset = 0xfffb,
};
struct KeyboardMapper: public MachineTypes::MappedKeyboardMachine::KeyboardMapper {

View File

@@ -96,7 +96,7 @@ uint16_t Typer::try_type_next_character() {
delegate_->clear_all_keys();
if(character_mapper_.needs_pause_after_reset_all_keys() ||
(string_pointer_ > 0 && string_[string_pointer_ - 1] == string_[string_pointer_])) {
return 0xffff; // Arbitrarily. Anything non-zero will do.
return MachineTypes::MappedKeyboardMachine::DelaySlot;
}
++phase_;
}