Версии раскладок клавиатур клонов ZX Spectrum

ВитГо

Мастер
Пользователь
Сообщения
28
Счётчик реакций
4
Очки
130
Собственно интересует сабж..
понятно что каноническая 40-ка кнопочная клавиатура наше все, но ведь были и другие варианты
предлагаю сюда запостить внешний вид раскладок, да в продолжение может быть размещать документацию по реализации (аппаратной, программной)
меня, например, интересуют клавиатуры с кнопками для джойстиков, интересно - кнопки с двух сторон для джойстиков на клаве существовали ? (чтобы вдвоем играть можно было на клавиатуре с комфортом)

p.s. думаю это было бы интересно "спектрумо-строителям"
 

Вложения

  • delta_keyboard.jpg
    delta_keyboard.jpg
    49 КБ · Просмотры: 19
  • simvol-128k.jpg
    simvol-128k.jpg
    71 КБ · Просмотры: 20
  • sunroce-jme-8231.jpg
    sunroce-jme-8231.jpg
    48.4 КБ · Просмотры: 19
  • delta_00.jpg
    delta_00.jpg
    584.7 КБ · Просмотры: 17
Последний раз редактировалось:
1,2 и 4 по сути раскладкой копируют ZX Spectrum+ZX_Spectrum+.jpg
 
я так понимаю что в тех клавах много клавиш не функциональны

кстати, а есть компьютеры в котором расширенные клавиши подключены в дополнение к 5 клавишам в ряду ?
теоретически получается можно обработать 64 кнопки с тех же 8 портов..
кто то пользуется этим ?
 
RUS/LAT F1-F5 там от контроллера клавы зависело, а остальные — это комбинации нажатий по сути. Например [E] = SS+CS.
 
в детстве помню такая клава была у Суры (Хобби ПК8000)...
ага. это 7007
у спектрума на F1-F5 какую функциональность вешали ?
Разную. На форуме — бесполезную. Там меню на них было. Хотяяя вроде еще они какие-то сложные команды автовводили, типа paper, ink, flash... На АТМке там на какие-то можно было вешать макросы, на каких-то весели готовые. Например Randomize usr 15619: rem:
 
Коллеги, зацепила эта тема. Подниму, пожалуй, несколько технических и исторических аспектов, которые могут прояснить картину «раскладочного хаоса» на клонах. Сам сталкивался и с железякой, и с необходимостью писать софт, который на всем этом работает.

1. Корень проблемы: не POKE, а IN/OUT
Когда говорят про POKE 23560, scancode — это грубое упрощение, работающее только в очень ограниченных случаях (обычно в BASIC-программах, эмулирующих нажатие). Настоящее чтение клавиатуры в машинном коде — это работа с портами #FE (и другими на клонах). Каждая половинка порта (верхние 5 бит адреса) выбирает одну из восьми линий матрицы 8x5.

На оригинальном Sinclair ZX Spectrum 48K схема сканирования была простой и элегантной: 8 линий на выход (A8-A15 шины адреса через дешифратор74LS138), 5 линий на вход (через буфер 74LS244). Раскладка была жестко зашита в эту матрицу и в ПЗУ процедуры чтения (#028E KEY_SCAN, #02BF KEY_TEST).

2. Почему на клонах всё «поплыло»?
Клоны (особенно советские/постсоветские) рождались в условиях дефицита оригинальных микросхем. Инженеры использовали то, что было:

· Другие дешифраторы и буферы. Менялась логика преобразования адреса порта в номер линии матрицы. Это первичный источник сдвига раскладки.
· Физическая перекоммутация клавиш. Чтобы хоть как-то соответствовать оригинальной карте символов, клавиши могли просто перепаять на другие линии матрицы. Поэтому на одном и том же клоне «ZX-Profy» у одного производителя могла быть одна раскладка, у другого — уже слегка измененная.
· Изменение процедуры чтения в ПЗУ (ROM). Самый радикальный, но и самый «правильный» с точки зрения совместимости путь. Если «железная» раскладка не совпадает с оригинальной, можно переписать драйвер клавиатуры в ПЗУ, чтобы он преобразовывал новые сканкоды в старые. Но для этого нужен был доступ к исходникам ПЗУ (редко) или мастерство в реверс-инжиниринге.

3. Практический вывод для программистов и пользователей эмуляторов
Если вы пишете код, который должен работать на реальном железе (демо, игра, утилита), особенно на клонах:

· Не используйте «магические» POKE для эмуляции ввода. Они ненадежны.
· Для чтения клавиш всегда вызывайте стандартную процедуру KEY_SCAN из ПЗУ (#028E). Она уже знает про раскладку данного конкретного клона (если ПЗУ было адаптировано).
· Если же вы пишете собственный драйвер ввода (например, для меню загрузчика или игры, работающей с отключенным ПЗУ), будьте готовы к тому, что вам понадобится несколько пресетов матриц для разных популярных клонов (Пентагон, Profi, Scorpion). Определять, какой пресет использовать, можно по OUT 7FFDh, A или другим признакам (например, по поведению порта #1FFD у 128K моделей).

4. Для владельцев конкретного железа (отвечая на вопросы в ветке)
Чтобы точно понять, какая у вас раскладка, нужен не большой софт, а минимальная тестовая программа на ассемблере.

1. Она должна в цикле опрашивать все возможные порты клавиатуры (#FEFE, #FDFE, ... #EFFE, #DFFE, ... — все 8x8=64 комбинации старших битов).
2. Для каждого нажатого порта выводить в каком-нибудь углу экрана значение этого порта (в двоичном или шестнадцатеричном виде).
3. Составить карту: нажимаете, например, «Q», видите, что сработал порт #FBFE и считан бит %xxxxx11101 (бит 0 = 0). Значит, эта клавиша сидит на линии A11=0 (порт #FB??) и входной линии D0.

Сопоставив эту карту с оригинальной матрицей Спектрума (есть в www.wearmouth.demon.co.uk/zx82.htm ), вы сразу увидите сдвиг. Если сдвиг кратен степени двойки (например, все линии смещены на 1) — это проблема в дешифраторе. Если хаотично — это ручная перепайка.

Итог: «Раскладка» — это не абстракция, а прямое следствие схемотехники конкретной платы. И пока вы используете стандартные вызовы ПЗУ, проблема чаще всего решена создателями вашего клона. Проблемы начинаются при прямом доступе к портам или при запуске софта, написанного под «железную» матрицу другого клона.
 
Коллеги, зацепила эта тема. Подниму, пожалуй, несколько технических и исторических аспектов, которые могут прояснить картину «раскладочного хаоса» на клонах. Сам сталкивался и с железякой, и с необходимостью писать софт, который на всем этом работает.
........
Итог: «Раскладка» — это не абстракция, а прямое следствие схемотехники конкретной платы. И пока вы используете стандартные вызовы ПЗУ, проблема чаще всего решена создателями вашего клона. Проблемы начинаются при прямом доступе к портам или при запуске софта, написанного под «железную» матрицу другого клона.

ну у меня, если так можно выразиться это практический интерес - хочу понять какая клавиатура, вернее ее доп клавиши, более универсальна..
понятно что 40 кнопок наше все, но есть ли сложившийся стандарт по доп клавишам в аппаратуре ?
 
но есть ли сложившийся стандарт по доп клавишам в аппаратуре ?
Ну 1,2 и 4 по сути стандарт, но можно и 7007. просто можно не подключать доп. линии. Всякие Edit и так далее останутся доступны.
 
Коллеги, тема поднята крайне важная. На основе обсуждения и личного опыта могу подтвердить: проблема не в «кривых» прошивках, а в фундаментальных аппаратных отличиях клонов от оригинала. Давайте разложим её по полочкам.

Корень проблемы: три уровня расхождений

1. Схема дешифрации адреса (самое главное). На оригинальном Spectrum для выбора линии матрицы используется выход дешифратора 74LS138, управляемый адресными линиями A8, A9, A10. На клонах эту роль может выполнять ПЛИС, резидентный декодер или кастомная логика на 74-й серии. Даже незначительное изменение в схеме декодера сдвигает всю матрицу на несколько позиций. Клавиша, которая на оригинале замыкала линию 3, на клоне может замкнуть линию 5.
2. Физическая перепайка клавиш. Инженеры, чтобы хоть как-то приблизить расположение символов к привычному, перепаивали шлейфы клавиатуры, меняя местами строки и столбцы матрицы. Это создаёт «хаотичный» сдвиг, некратный степени двойки.
3. Программная коррекция в ПЗУ (редко, но бывает). Самый грамотный, но и самый сложный путь. Если схема декодера необратимо изменена, можно переписать драйвер клавиатуры в ПЗУ так, чтобы он преобразовывал новую аппаратную матрицу в старые, ожидаемые софтом, сканкоды. Именно это было сделано в некоторых прошивках для ZX Evolution.

Практическое решение: создание «карты портов»

Вместо того чтобы гадать, нужен точный метод диагностики. Предлагаю небольшую тестовую программу, которая составит точную карту для любого клона.

Принцип работы: Программа в цикле опрашивает все 64 возможных порта клавиатуры (#FEFE, #FDFE, ... #7FFE, #BFFE, ...) и для каждого нажатия определяет, какой бит данных изменился. Это даёт «сырую» аппаратную матрицу.

Ключевой код на ассемблере (набросал, программа если что не полная, но можно взять за основу):
Код:
; Z80 ASM: Сканер матрицы клавиатуры. Выводит адрес порта и считанные данные.
START:
    LD HL, 0x4000        ; Начало экранной области для вывода
    LD BC, 0xFEFE        ; B=0xFE (маска для OUT), C=0xFE (стартовый порт)
SCAN_LOOP:
    IN A, (C)            ; Читаем порт клавиатуры
    CPL                  ; Инвертируем: теперь 1 = нажатая клавиша
    AND 0x1F             ; Нас интересуют только младшие 5 бит данных
    JR Z, NEXT_PORT      ; Если все биты 0, клавиша не нажата - идём дальше

    ; --- Вывод результата на экран ---
    PUSH AF
    PUSH BC
    ; Выводим адрес порта (значение в BC) в HEX
    LD A, B
    CALL BYTE_TO_HEX
    LD (HL), A
    INC HL
    LD (HL), D
    INC HL
    LD A, C
    CALL BYTE_TO_HEX
    LD (HL), A
    INC HL
    LD (HL), D
    INC HL
    LD (HL), ':'         ; Разделитель
    INC HL
    ; Выводим данные (считанный байт)
    POP BC
    POP AF
    CALL BYTE_TO_HEX
    LD (HL), A
    INC HL
    LD (HL), D
    INC HL
    LD (HL), 13          ; Переход на новую строку
    CALL CALC_NEXT_LINE  ; HL = адрес следующей строки на экране
    ; --- Конец вывода ---

NEXT_PORT:
    ; Формируем следующий адрес порта: сдвигаем 0 в битовой маске FE->FD->FB...
    RLC B                ; Циклически сдвигаем старший байт адреса (маску)
    LD A, B
    CP 0xFE              ; Проверили все 8 вариантов?
    JR NZ, SCAN_LOOP     ; Если нет, продолжаем
    ; Здесь можно добавить задержку и цикл для непрерывного сканирования
    JR START

; Подпрограмма: преобразование байта в A в два HEX-символа (результат в A и D)
BYTE_TO_HEX: ...
; Подпрограмма: вычисление адреса следующей строки экрана
CALC_NEXT_LINE: ...
Как использовать:

1. Запустить программу на целевом клоне.
2. Последовательно нажимать все клавиши (хотя бы по одной из каждой группы).
3. Записать вывод: для каждой клавиши программа покажет, какой порт (#XXXX) и какой бит (D4-D0) сработал.
4. Составить таблицу из 8 строк (порты) и 5 столбцов (биты). Это и есть ваша аппаратная матрица.

Что делать с этой картой?

1. Сравнить с оригиналом. Оригинальную матрицу Spectrum можно найти в интернете (например, [WEARMOUTH]). Если ваша матрица — это сдвинутая или переставленная версия оригинальной, значит, проблема только в декодере адреса.
2. Написать переходную таблицу. Для своего софта, который читает клавиатуру напрямую (через IN), вы можете создать таблицу преобразования: [порт_клона, бит_клона] -> [порт_спектрума, бит_спектрума].
3. Проверить работу стандартного ПЗУ. Если прошивка вашего клона адаптирована, вызов стандартной процедуры KEY_SCAN (адрес #028E в 48K ROM) уже должен возвращать правильные сканкоды. Это можно проверить простым BASIC-программкой, считывающей INKEY$.

Итог для разработчиков и пользователей

· Для пользователя: Если игра/программа не видит нажатий, скорее всего, она обращается к клавиатуре напрямую, в обход ПЗУ. Нужно искать патч или альтернативную версию, либо прошивать адаптированное ПЗУ (если есть).
· Для разработчика: Если вы пишете код, который должен работать на множестве клонов, всегда используйте стандартный вызов ROM (#028E) для чтения клавиш. Свои драйвера ввода пишите только для софта, работающего с отключенным ПЗУ, и будьте готовы к нескольким вариантам матриц.
 
Клавиша, которая на оригинале замыкала линию 3, на клоне может замкнуть линию 5.
Эээ. Вы это где-то видели? Если клавиша Q сбрасывала в 0 младший бит порта FBFE, то на всех исправных клонах она будет сбрасывать тот же бит того же порта. Иначе клава клона просто бы не работала в 99% софта.
 
· Для разработчика: Если вы пишете код, который должен работать на множестве клонов, всегда используйте стандартный вызов ROM (#028E) для чтения клавиш. Свои драйвера ввода пишите только для софта, работающего с отключенным ПЗУ, и будьте готовы к нескольким вариантам матриц.
Чушь! Все совместимые клоны придерживались формата дешифрации классической клавы спектрума, кто не придерживался этой позиции уже не являлся спектрум-совместимым.
Большинство игр на спеке (а особенно ресурсоёмких по тактам проца) используют прямое чтение портов клавы, это быстрее, проще и гибче чем выцеплять полный опрос портов клавы через ПЗУ. Некоторые клоны (по крайней мере Profi) использовали расширение матрицы на старшие биты порта #FE, но это как правило проблем совместимости не создавало. Но вот зоопарк контролеров-адаптеров PC-клавы уже мог наплодить проблемы. На том же Profi контроллер (кондор кажется), во первых тормозил проц wait-ом при нажатии клавиши, во вторых не все одновременные нажатия клавиш могли быть обработаны, в третьих запросы чтения порта с несколькими нулями в старшем байте адреса порта корректно не обрабатывались за исключением полностью нулевого старшего байта. Вот это вот запросто херило чтение клавиш в ряде игр. ))
 
Есть ведь адаптеры с PS/2-клавиатур, использующие программируемую матрицу MT8816 (на днях заказывал на Али - 10 шт 700 рублей...). Там реализуется полная имитация замыкания кнопок. По желанию можно и комбинации кнопок имитировать.
 
Назад
Вверх