Witchcraft Creative Group

Спектрум жив!

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Контроллер клавиатуры PS/2

Печать PDF
Рейтинг пользователей: / 4
ХудшийЛучший 

Клавиатура фирменного спектрума

Нынче хорошую механическую клавиатуру для спектрума сложно найти. В спектрумовские времена очень удобные клавиатуры были у Робика. Встретив в продаже я купил одного Робика, внутренности были в ужасном состоянии, но как клавиатура для моего "зоопарка" очень даже ничего. Как временная мера было нормально, но со временем мне захотелось чего-то более универсального, да и механика ведь не вечная. По этой причине я развел печатную плату контроллера, который был разработан для компьютера KAY-2010 Камилем Каримовым. Контроллер вышел достаточно универсальным: легко подключается практически к любому спектруму, при работе не тормозит Z80 (при работе ЦП на частоте 3.5МГц контроллер успевает отработать запрос в положеное время, в режиме турбо контроллер /WAIT-ом притормаживает процессор, но не значительно).

Контроллер клавиатуры KayKBD by CaroПодключается он к линиям клавиатуры (KA8-KA15, KD0-KD4), дополнительно подключаются сигналы /M1, /A0, /IORD, /RES, /MAGIC, ну и собственно питание.

Платка исполнена в таком виде, что легко может быть закреплена на задней стенке корпуса, на заглушке плат расширения. К компьютеру подключается с помощью двух шлейфов: 16 жильный к разъему клавиатуры, питанию и 10 жильный к внутренним сигналам ПК (/RES, /MAGIC, /M1, A0, /IORD...).

Так же среди "фишек" этого контроллера можно назвать:

  • возможность работы с EEPROM (энергонезависимой памятью) объемом 256 байт, общение с которой происходит через порт #FE;
  • программное управление сигналом Turbo через этот же порт;
  • возможность использования макросов (определенной комбинации клавиш можно присвоить целую последовательность клавиш), но с ними я пока еще не разбирался.

Алгоритм работы с контроллером

Команды управления контроллером:

  • Задать адрес EEPROM - 0x55,"A",Adr_L,Adr_H

    • Прочитать байт из EEPROM по ниблам - 0x55,"R",Data_H,Data_L
    • Записать байт в EEPROM - 0x55,"W',Data
Чтение скан-кода нажатой клавиши:
  • Прочитать скан-код нажатой клавиши - 0x55,"C",Data_H,Data_L

Управление режимом TURBO:

  • Выключить TURBO - 0x55,"T",0x00
  • Включить TURBO - 0x55,"T",0xFF
  • Прочитать состояние TURBO - 0x55,"T",0x01 (не 0x00 и не 0xFF)

Исходные тексты процедур работы с контроллером 

Вот пример работы с EEPROM в этом контроллере на ассемблере:

; Чтение байта из ячейки EEPROM
; Вход: HL -> ADR_eeprom
; Выход: C = (ADR_eeprom)
;  CY = 0 - OK
rd_eeprom:
call set_adr ; Задать адрес EEPROM
ret c ;Выход с ошибкой
; Задан адрес ячейки EEPROM в контроллере
ld a,055h  ; код доступа
in a,(0FEh)
ld a,"R" ;Команда чтения EEPROM
in a,(0FEh)
; Контроллер ждет чтения двух половинок байта
in a,(0FEh)
rlca
rlca
rlca
rlca
and 0F0h ;ст. нибл данных
ld c,a ;сохранить
in a,(0FEh)
and 0Fh ;мл. нибл данных
or c
ld c,a ; байт данных из EEPROM
ret  ; CY=0
;-------------------------------------------
; Запись байта в EEPROM
; Вход: HL -> ADR_eeprom
;        C -> (ADR_eeprom)
;  CY = 0 - OK
wr_eeprom:
call set_adr ; Задать адрес EEPROM
ret c ;  Выход с ошибкой
; Задан адрес ячейки EEPROM в контроллере
ld a,055h  ; код доступа
in a,(0FEh)
ld a,"W" ; Команда записи в EEPROM
in a,(0FEh)
ld a,c ; Байт данных
in a,(0FEh);  Записать
ret  ; CY=0
;-------------------------------------------
; Задать текущий адрес ячейки EEPROM.
; После операций чтения/записи
; происходит авто-инкремент текущего адреса.
set_adr:
  ld a,055H ;Код доступа
in a,(0FEh) ; байт ответа
and 1Fh     ; маска
cp 0Ah ; должен прочитаться 0Ah
scf  ; CY=1
ret nz ; Иначе выход с ошибкой
; Контроллер откликнулся
ld a,"A" ;Команда задания адреса
in a,(0FEh)
ld a,L ;Мл.Байт адреса
in a,(0FEh)
ld a,H ;Ст.Байт адреса
in a,(0FEh)
xor a ; CY=0
ret  ; Выход без ошибки
;============================================== 

Материалы к статье

Обновлено 06.12.2011 11:48  
Организация и проведение праздничных мероприятий, фото- и видеосъемка