клавиатура

  1. Строительство [ редактировать ]
  2. Запрос [ редактировать ]
  3. Проблемы [ редактировать ]
  4. Кнопка RESTORE [ редактировать ]
  5. Схема [ редактировать ]
  6. Запасные ключи [ редактировать ]
  7. Соединение C128 [ редактировать ]
  8. Клавиатура PS / 2 на порту набора данных [ редактировать ]
  9. Прямой запрос ключа в ассемблере [ редактировать ]
  10. Запрос ключа в бейсике [ редактировать ]
  11. Полезные пики и тыквы [ редактировать ]

Клавиатура является наиболее важной устройство ввода компьютер. Пользователь может использовать все это доступно знак Enter. Некоторые входные строки используются компьютером как команды как например СПИСОК , RUN , НАГРУЗКИ , SAVE распознан. Путем сопоставления (см. программирование ) Команды часто сочетаются с номера строк возникать программы которые затем могут быть отредактированы, выполнены, сохранены или загружены.

C64 это клавиатурный компьютер (OEM Mitsumi), компьютер, который встроил клавиатуру в корпус и оптически объединяет в одно устройство. Другие принадлежат к этому роду домашний компьютер как коммодор ВК 20 , C16 , C116 , C128 , Плюс / 4 , Amiga или Atari ST ,
Клавиатура является основным устройством ввода C64.

Строительство [ редактировать ]

Клавиатура C64 имеет 66 клавиш.

  • Блокировка переключения передач механически фиксируется и подключается параллельно левому переключателю.
  • ВОССТАНОВЛЕНИЕ действует непосредственно над монотриггер на NMI Ввод процессор ,
  • Оставшиеся 64 клавиши соединены в матрицу 8 × 8 (см. схема ниже).

Как работает матрица:

Например, если был нажат A, между линиями PA1 и PB2 имеется проводящее соединение ЦРУ первый

Запрос [ редактировать ]

Операция запроса клавиатуры, как в Kernal реализовано:

  • Инициализация портов ввода-вывода происходит в $ FDA3 :
    1. порта биты PB0-PB7 из ЦРУ 1 запрограммированы как входы ($ DC03 = 0).
    2. Без нажатия клавиши входы имеют высокий уровень благодаря встроенным в модуль порта подтягивающим резисторам.
    3. Биты порта PA0-PA7 CIA 1 программируются как выходы ($ DC02 = 255).
  • Настоящий keyscan Рутина в $ EA87 сделайте следующее:
    1. 0 (низкий уровень) проталкивается через биты порта PA0-PA7 ($ DC00 = 254,253,251,247,239 ..., см. KERNAL $ EAA3 и $ EAD6).
    2. Если в битах входного порта PB0-PB7 / DC01 (KERNAL $ EAAB) обнаружены нули, соответствующие клавиши нажаты.

Проблемы [ редактировать ]

  • Среди прочего, джойстики Используя одни и те же линии (каждое движение тянет одну из линий на землю или 0 В), есть несколько побочных эффектов.
  • У которой Kernal -Выполнение запроса клавиатуры заметно в джойстике 1, наиболее сильном (символы появляются без нажатия кнопки), но также и джойстик 2 мешает запросу клавиатуры (клавиши больше не распознаются или неправильно распознаются).
  • Хотя альтернативные запросы клавиатуры (в ваших собственных программах или играх) могут помешать обнаружению движений джойстика в качестве нажатия клавиши (строка CIA не установлена ​​на низкий уровень, но все равно читает низкий => перемещаемый джойстик), но все равно не клавиатура (безопасно) читать, когда джойстик перемещается.
  • При одновременном нажатии как минимум на три клавиши, в некоторых случаях другие клавиши ошибочно распознаются как нажатые. Это может быть проверено, например, обоими курсор Удерживая левую клавишу Shift вверх и вниз. Есть такие символы, как Shift- «A». В матрице в нижней части статьи вы можете видеть, что если вы создаете вдумчивый прямоугольник с левой клавишей Shift и двумя клавишами CRSR в виде трех углов, четвертый угол находится на клавише «A». С помощью того же метода вы можете узнать с другими комбинациями трех клавиш, если и какие другие клавиши были распознаны неправильно. Этот эффект сделан эмуляторы не подражал до сих пор (2008). Диоды в матрице клавиатуры предотвратили бы эту проблему, но не использовались.
  • С точки зрения C64, некоторые комбинации входных сигналов принципиально не различимы. Например, между
    • Джойстик 2 вверх + F1 и
    • Джойстик 2 вверх + джойстик 1 огонь

нельзя отличить.

Кнопка RESTORE [ редактировать ]

ВОССТАНОВЛЕНИЕ Кнопка напрямую подключена к конденсатору через конденсатор NMI Оборудование подключено к процессору. Так как это, по крайней мере, рано хлебница -C64s слишком маленький, вы должны очень сильно нажимать на клавишу (= быстро), чтобы он реагировал. Средство устранения - замена или параллельное подключение оригинального компонента (51 пФ, C38) конденсатором 1 нФ.

Схема [ редактировать ]

И вот назначение контактов в C64:

Запасные ключи [ редактировать ]

  1. Commodore клавиатуры: C128 ; С + 4 ; C232 ; C264 ; C364 ; SX-64 ; C65 ; C64GS
  2. Amiga Клавиатуры: A500; A500 +; A600 (также в черном цвете); A1000; A1200; A1500; A2000; A2500; A3000; A4000; SX-500; CDTV (черный); CD32 (черный)
  3. Клавиатура Mitsumi AT KKR-E99AC
  4. Клавиатура Mitsumi AT KKR-E99AC-9
  5. Клавиатура Mitsumi Amiga (с MOS Technology 6570-036 - микроконтроллер 6500/1 на плате клавиатуры в Amiga 500)

Соединение C128 [ редактировать ]

  1. масса
  2. X
  3. NMI
  4. VCC
  5. Row3
  6. Row6
  7. Row5
  8. Row4
  9. Row7
  10. row2
  11. Row1
  12. row0
  13. COL0
  14. Col6
  15. COL5
  16. COL4
  17. COL3
  18. COL2
  19. COL1
  20. COL7

С16 время [ редактировать ]

С16 время [   редактировать   ]

Клавиатура PS / 2 на порту набора данных [ редактировать ]

Адаптер и программное обеспечение для подключения немецкий английский

увидеть таблица клавиатуры C64 ,

Клавиатура запросов может с Бейсик - команда ВХОД , GET или PEEK сделано или через соответствующий языковые программы машины ( ассемблер ).

Прямой запрос ключа в ассемблере [ редактировать ]

; Эта программа ожидает, пока не будет нажата клавиша «S». Программа начинается с SYS 49152 * = с000; Начальный адрес начала программы было ; прерывания блокировка ( IRQ Выключите подпрограмму, чтобы избежать совпадения со старым запросом клавиатуры) Lda #% 11111101; Тестовый столбец 1 (COL1) матрицы (линия порта PA1 = 0) станция $ dc00; Записать в регистр цикл Lda $ dc01; Считать строчные регистры и #% 00100000; Маскирующая линия 5 (ROW5) (линия порта PB5) BNE петля; Подождите, пока не нажмете "S" ( аккумулятор = 0) кли ; Разрешить прерывания до конца ртс ; возвращение Бейсик .c000 78 be .c001 a9 fd lda # $ fd .c003 8d 00 dc sta $ dc00 .c006 ad 01 dc lda $ dc01 .c009 29 20 и # $ 20 .c00b d0 f9 bne $ c006 .c00d 58 cli .c00e 60 rts

Запрос ключа в бейсике [ редактировать ]

10 ВВОД «Пожалуйста, введите что-нибудь»; 20 долларов PRINT «Они вошли:»; Примечание: для этого требуется подтверждение ввода с клавиатуры ВОЗВРАТ продолжить программу. Ввод с клавиатуры находится в переменная A $.
10 PRINT "Пожалуйста, нажмите клавишу:" 20 GET A $: ЕСЛИ A $ = "" ТОГДА 20 30 ПЕЧАТЬ "Они нажали клавишу:"; CHR $ (34); A $; CHR $ (34) Примечание. Если клавиша не нажата, ответ переменной A $ будет пустым строка , Чтобы реализовать состояние ожидания, необходимо проверить A $, а если A $ пусто, команда GET должна быть снова указана.

  • Буфер клавиатуры в сочетании с ОСНОВНОЙ командой GET
POKE

198,0: ПОДОЖДИТЕ 198,1: GET A $ Примечание: [[буфер клавиатуры] будет сначала очищен, используя WAIT, чтобы изменить количество символов в клавиатуре. буфер клавиатуры подождал, а затем прочитал символ с помощью GET. Вы спасаете себя здесь line_number зависит строительство петли ,

  • С помощью команды BASIC PEEK

10 KL = 245: KH = KL + 1: REM Указатель адреса таблицы кодов клавиш 20 AZ $ = CHR $ (34): REM Кавычка 30 IF PEEK (197) <> 64 THEN 30: REM Дождаться, пока не будет нажата ни одна клавиша 40 PRINT CHR $ (14); «Пожалуйста, нажмите клавишу ...» 50 T = PEEK (197): ЕСЛИ T = 64, ТО 50 60 TB = PEEK (KL) + PEEK (KH) * 256: REM TB: Адрес в таблице кодов ключей 70 PRINT "Вы нажали клавишу"; AZ $; CHR $ (PEEK (TB + T)); AZ $; "," 80 PRINT "код клавиши"; T; "в таблице @"; TB 90 POKE 198,0: REM Пустой буфер клавиатуры Примечание . Клавиатура вводится чтением Адрес памяти 197 (00C5 $).
код ключа будет в переменная Т подал. Если ни одна клавиша не нажата, обратная связь всегда имеет значение 64. Поэтому, чтобы реализовать состояние ожидания, необходимо проверить T на это значение. Если возвращаемое значение равно 64, код клавиатуры должен быть снова считан с помощью PEEK. кнопки управления CTRL, SHIFT и C = изменить указатель в ячейках памяти 245 и 246. Этот указатель находится в IRQ Рутина настроена на другую таблицу кодов клавиш в зависимости от комбинации этих клавиш. Однако на этом этапе программа BASIC имеет так называемое состояние гонки (несогласованность, зависящая от выполнения программы): если обработка двух прерываний (IRQ) происходит между двумя командами PEEK, которые изменяют указатель, значения двух команд PEEK больше не совпадают Поэтому TB не содержит адреса в таблице клавиатуры, поэтому вычисляется неверный результат. Поскольку это может происходить редко, этот факт не включен в программу.

Полезные пики и тыквы [ редактировать ]

Объяснение используемых областей памяти можно найти под нулевой Page ,

Auto Repeat:

POKE 650,128 заставляет каждую клавишу повторяться автоматически, пока клавиша удерживается нажатой.
POKE 650.0 снова отменяет эту функцию.

Keylock:

POKE 649.0 блокирует ввод с клавиатуры, потому что буфер клавиатуры установлен на длину 0.
POKE 649,10: POKE 808,237 разрешает ввод снова.
или

POKE 655,71 Изменение указателя на таблицу декодирования, а также блокировку клавиатуры
Тыкать 655.72 Разблокировать клавиатуру.

или

POKE 56322,224 также выключает клавиатуру, на этот раз регистр направления данных ЦРУ 1 изменился. Поэтому этот POKE часто используется во время запроса джойстика, поскольку сигналы джойстика частично перекрываются с клавиатурой.
POKE 56322,255 снова активирует клавиатуру.

или выключив прерывания (Исключение: RUN / STOP + ВОССТАНОВЛЕНИЕ ) или I / O логика ,

Отключить отдельные ключи:

  • RUN / STOP: POKE 788,52 - включить с помощью POKE 788,49
  • ВОССТАНОВИТЬ: POKE 792,193 - Включение с помощью POKE 792,234

Буфер клавиатуры: в ячейках памяти 631-640 находится буфер клавиатуры который может быть длиной до 10 символов. Он может быть считан с помощью PEEK, но также может быть смоделирован с помощью нажатий клавиш POKE. Это может быть использовано, например, для

  • ОСНОВНЫЕ строки, например, с объявлениями функций через DEF FN динамически создавать поверх пользовательского ввода или
  • отмена, связанная с ошибкой, включая возврат в прямой режим перехватить (сравнить TRAP или ОШИБКА ).

С соответствующим образом подготовленным экраном (программными строками), позиционированным курсором и вымышленными нажатиями клавиш в буфере клавиатуры это возможно на таком обходном пути .

POKE 198.0 очищает буфер клавиатуры. Это особенно полезно в начале нового ввода, чтобы предотвратить нежелательный ввод любых предыдущих нажатий клавиш, хранящихся в буфере клавиатуры.