mirror of
https://git.k-space.ee/arti/vt1200.git
synced 2026-10-30 12:03:54 +02:00
Distils public docs into reference/keyboard-mouse/PROTOCOL.md for the level-1 Keyboard (27) / Mouse (26) device tests: - keyboard: 4800 8N1 RS-423, self-test via FD -> 01 00 00 00 (errors 3D/3E) - mouse: 4800 8O1 RS-232, self-test via 'T' -> 4-byte report (errors 3D/3E, >=0x20 fatal) - separate ports: DUART2 A=keyboard, B=mouse (NOT daisy-chained) MAME already has an LK201 device (src/mame/dec/lk201.cpp/.h) but no DEC mouse.
77 lines
2.2 KiB
C++
77 lines
2.2 KiB
C++
// LK201 / LK401 protocol constants. See docs/protocol.md.
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
|
|
namespace lk {
|
|
|
|
const uint32_t kBaud = 4800;
|
|
|
|
// Responses from the keyboard (0xB3-0xBB are never keycodes).
|
|
const uint8_t kAllUps = 0xB3;
|
|
const uint8_t kMetronome = 0xB4;
|
|
const uint8_t kOutputError = 0xB5;
|
|
const uint8_t kInputError = 0xB6;
|
|
const uint8_t kKbdLocked = 0xB7;
|
|
const uint8_t kTestModeAck = 0xB8;
|
|
const uint8_t kPrefixKeysDown = 0xB9;
|
|
const uint8_t kModeChangeAck = 0xBA;
|
|
const uint8_t kReserved = 0xBB;
|
|
|
|
// Power-up report.
|
|
const uint8_t kPowerUpId = 0x01;
|
|
const uint8_t kStuckKey = 0x3D;
|
|
const uint8_t kSelfTestFailed = 0x3E;
|
|
|
|
// Commands to the keyboard.
|
|
const uint8_t kLedOff = 0x11;
|
|
const uint8_t kLedOn = 0x13;
|
|
const uint8_t kEnableKeyclick = 0x1B;
|
|
const uint8_t kEnableBell = 0x23;
|
|
const uint8_t kSoundBell = 0xA7;
|
|
const uint8_t kDisableKeyclick = 0x99;
|
|
const uint8_t kDisableBell = 0xA1;
|
|
const uint8_t kRequestId = 0xAB;
|
|
const uint8_t kDisableCtrlClick = 0xB9;
|
|
const uint8_t kEnableCtrlClick = 0xBB;
|
|
const uint8_t kSetDefaults = 0xD3;
|
|
const uint8_t kEnableLk401 = 0xE9;
|
|
const uint8_t kPowerUpReset = 0xFD;
|
|
|
|
// LED parameter bits, sent as 0x80 | mask after kLedOn / kLedOff.
|
|
const uint8_t kLedWait = 0x01;
|
|
const uint8_t kLedCompose = 0x02;
|
|
const uint8_t kLedLock = 0x04;
|
|
const uint8_t kLedHold = 0x08;
|
|
const uint8_t kLedAll = 0x0F;
|
|
|
|
// Division modes, and the mode-set command byte: 1 DDDD MM 0.
|
|
const uint8_t kModeDown = 0x00;
|
|
const uint8_t kModeAutoRepeat = 0x02;
|
|
const uint8_t kModeUpDown = 0x06;
|
|
const uint8_t kDivisions = 14;
|
|
|
|
inline uint8_t setMode(uint8_t division, uint8_t mode) {
|
|
return 0x80 | (division << 3) | mode;
|
|
}
|
|
|
|
inline uint8_t param(uint8_t value) { return 0x80 | value; }
|
|
|
|
// The name of a response byte, or nullptr for a keycode.
|
|
inline const char *responseName(uint8_t b) {
|
|
switch (b) {
|
|
case kAllUps: return "ALL UPS";
|
|
case kMetronome: return "METRONOME";
|
|
case kOutputError: return "OUTPUT ERROR";
|
|
case kInputError: return "INPUT ERROR";
|
|
case kKbdLocked: return "KBD LOCKED";
|
|
case kTestModeAck: return "TEST MODE ACK";
|
|
case kPrefixKeysDown: return "PREFIX KEYS DOWN";
|
|
case kModeChangeAck: return "MODE CHANGE ACK";
|
|
case kReserved: return "RESERVED";
|
|
default: return nullptr;
|
|
}
|
|
}
|
|
|
|
} // namespace lk
|