:: СОДЕРЖАНИЕ НОМЕРА
:: Газетные рубрики
:: АВТОРЫ
:: Поиск
:: Поддержка проекта
Webmoney:
|
:: №25 (09.09.2005) Просмотров: 40881
Автор: Камиль Каримов. Рубрика: Железо. Номер: №25 (09.09.2005). Подключение IBM-периферии к ZX Spectrum. КлавиатураК настоящему времени существует несколько вариантов подключения клавиатуры от IBM PC к Спектруму, причем практически все они являются универсальными, то есть могут подключаться к любой из его модификаций.Сейчас я не буду разбирать достоинства и недостатки этих вариантов, а просто предлагаю свой вариант контроллера клавиатуры, основой которого является микроконтроллер AT90S2313 (или ATTiny 2313, приходящий ему на замену) фирмы ATMEL. Имея при 20-выводном корпусе 15 линий ввода/вывода (у Tiny модификации 18 линий), память программ 2 килобайта и ОЗУ объемом 128 байт, этот микроконтроллер позволяет создать простое и компактное устройство, позволяющее подключить к Спектруму стандартную IBM-клавиатуру. Для начала хочу напомнить, что в Спектруме клавиатура представляет собой матрицу из 8 колонок и 5 строк, в узлах которой находятся контакты, замыкаемые при нажатии на расположенные над ними клавиши (рис 1). Это базовая схема 40-клавишной клавиатуры. Расширенные клавиатуры отличаются наличием клавиш замыкающих сразу два контакта в матрице. Причем клавишей-модификатором обычно является либо Symbol Shift (S.Sh), либо Caps Shift (C.Sh). 5-разрядная шина строк матрицы подключена к шине данных процессора Z80 через порт клавиатуры, который выбирается младшей половиной адресной шины процессора Z80 и доступен как порт ввода с адресом 0FEh (десятичный адрес 254). Каждая из 5 линий строк подтянута к шине питания (+5V) резистором с номиналом обычно 10 Ком, что при чтении обеспечивает логическую «1» в соответствующих разрядах порта клавиатуры. Старшие 8 бит адресной шины процессора Z80 позволяют выбрать одну или несколько из 8 колонок клавиатурной матрицы как порт ввода, адрес которого состоит из адреса порта клавиатуры и кода старшей половины адресной шины процессора Z80 с нулевым логическим уровнем в соответствующем разряде. Для исключения замыкания адресных линий при нажатии нескольких клавиш на каждой из них включены развязывающие диоды (как вариант могут устанавливаться буферные схемы с открытым коллектором, например 555ЛП9). Для проверки замыкания контакта в одном или нескольких узлах клавиатурной матрицы последовательно считываются состояния портов клавиатуры с низким уровнем в выбранной колонке. При не нажатых клавишах, с шины данных клавиатуры за счет их подтяжки к +5V, читаются сигналы высокого уровня (логическая «1»). Если нажать одну или несколько клавиш, то при чтении порта в соответствующих нажатым узлам битах будут читаться сигналы низкого уровня (логический «0»). Если выбирается несколько колонок, то нажатие клавиш в соседних колонках приводит к формированию в порту сигнала объединенного схемой проводного «И». Таким образом, имеется 40 контактов, замыкание каждого из которых может анализироваться программно чтением 8 портов ввода, состояние каждого из которых определяется замыканием этих контактов. Принцип работы клавиатуры IBM PC практически совпадает с описанным выше, но если в Спектруме клавиатура является составной частью схемы компьютера, то в IBM это отдельное устройство со своим контроллером. Для передачи информации о нажатых клавишах из клавиатуры в компьютер используется последовательный двухпроводный интерфейс, состоящий из линии данных DAT и линии синхронизации CLK. Существуют два стандарта обмена информацией с клавиатурами. Первый стандарт использовался для приема информации от XT-клавиатур и был однонаправленным - только передача скан-кода нажатых (или отжатых) клавиш от клавиатуры. Второй стандарт используется для современных AT-клавиатур и PS/2 мышей и предусматривает как прием, так и передачу информации от компьютера к клавиатуре. По понятным причинам подключение XT-клавиатуры мы рассматривать не будем. На рис. 2 и 3 показаны временные диаграммы передачи информации из AT-клавиатуры в компьютер и передачи в AT-клавиатуру команды от компьютера соответственно. Рис. 2
Рис. 3 Здесь: 0..7 - номера передаваемых битов; P - бит паритета (нечетный); ACK - бит подтверждения приема от клавиатуры. Теперь немного о том, как кодируется передаваемая из клавиатуры информация о состоянии клавиш. Контроллеры, встроенные в AT-клавиатуры поддерживают три различных таблицы скан-кодов (Scan Code Set): Scan Code Set 1 - таблица скан-кодов XT-клавиатуры; Scan Code Set 2 - таблица скан-кодов AT-клавиатуры; Scan Code Set 3 - дополнительная таблица скан-кодов AT-клавиатур. Переключение таблиц выполняется передачей в клавиатуру команды Set mode с номером, соответствующим выбранной таблице (в некоторых клавиатурах переключится в режим 1, не удается). Характерной особенностью 3-го режима является возможность работы практически всех клавиш в режиме Make/Break, в котором при удержании клавиш не выполняется автоповтор передачи скан-кода нажатой клавиши, в отличие от режима 1 и 2 где используется режим Typematic (при удержании, автоповтор с заданной частотой). Еще одно преимущество этого режима - уникальный скан-код для всех клавиш без использования дополнительного префиксного кода (0E0h), который в режиме 1 и 2 предшествует нажатию и отпусканию некоторых клавиш. Это уменьшает время необходимое на прием информации от клавиатуры, реализованный в контроллере программно без использования прерываний. Сделано это для того, что бы уменьшить время реакции системы на опрос порта клавиатуры, который выполнен с использованием механизма аппаратного прерывания микроконтроллера AT90S2313. Итак, задачей контроллера будет управление режимом работы клавиатуры, прием, анализ, буферирование и преобразование скан-кодов клавиатуры IBM и, по запросу от процессора Z80, выдачу в порт клавиатуры Спектрума кода, соответствующего замкнутым контактам его матрицы. Эти задачи выполняет контроллер клавиатуры, схема которого представлена на рис. 4. Как уже отмечено, основой схемы является микроконтроллер AT90S2313 фирмы ATMEL. Тактовая частота его работы задается кварцем ZQ1 на 10 МГц, типовое включение, которого требует установки двух конденсаторов C1 и C2 на 15-27 Пф. Порт B микроконтроллера используется для чтения старших адресных линий процессора Z80 и для выдачи в порт клавиатуры Спектрума 5 разрядов данных. Для развязки шины адреса и данных используется любой 8-разрядный не инвертирующий буфер, например АП6, управляемый битом PD6 микроконтроллера. Учитывая наличие на адресных линиях клавиатуры развязывающих диодов или буферов с открытым коллектором, каждая из адресных линий на входе АП6 подтянута к +5V резистором с номиналом 10 КОм. Линии CLK и DAT клавиатуры IBM подключены к 0 и 1 битам порта D микроконтроллера. Рекомендуется их подтяжка к +5V резисторами с номиналом порядка 4.7 КОм. На вход PD2/INT0 микроконтроллера, который используется как вход внешнего прерывания, со Спектрума подается сигнал запроса на чтение порта клавиатуры /CSKBD. Элемент ИЛИ (DD3:1) установлен для применения контроллера совместно со «Скорпионами» и «Каями», у которых сигнал выборки клавиатуры формируется совместно с сигналом выборки Кэмпстон джойстика, а для их разделения используется младший бит (A0) адреса Z80. Для остальных Спектрум совместимых моделей можно либо не ставить этот элемент вовсе, либо подать на оба его входа сигнал /CSKBD. Элемент ИЛИ (DD3.2) обеспечивает управление сигналом /WAIT процессора Z80. При установленном в «0» бите PD4 микроконтроллер разрешает перевод процессора Z80 в режим ожидания по сигналу выборки клавиатуры на то время, пока будет считан адресный код сканирования, вычислен и выдан код данных в порт клавиатуры. После этого бит PD4 устанавливается в «1», что снимает сигнал /WAIT с входа Z80, переводя его в рабочий режим. Длительность сигнала /WAIT при тактовой частоте микроконтроллера составляет всего порядка 3-4 мксек, что практически незаметно для работы Спектрума. Но дополнительно для уменьшения торможения Спектрума сигналом /WAIT от контроллера, используется тот факт, что при не нажатых клавишах с порта клавиатуры в любом случае считываются все «1». При этом можно заблокировать битом PD4 выдачу сигнала /WAIT, а на вход порта клавиатуры с выхода микроконтроллера подать все «1». Таким образом, при не нажатых клавишах контроллер клавиатуры никак не влияет на скорость работы Спектрума. Светодиод VD3 включен таким образом, что при готовности контроллера выдать код клавиатуры он светится (есть нажатые клавиши), а иначе нет. Свободные биты PD3 и PD5 микроконтроллера используются для формирования сигналов /RES (СБРОС) и /NMI (Не маскируемое прерывание) для процессора Z80. Теперь самый важный вопрос - привязка клавиш IBM клавиатуры к клавиатуре Спектрума. В начале о клавишах выполняющих специфические функции. Клавиша Pause/Break так и просится на роль формирователя сигнала остановки работы компьютера. При ее нажатии в программе контроллера устанавливается флаг ожидания и при первом же обращении Спектрума к клавиатуре сигнал /WAIT устанавливается в «0» и битом PD4 удерживается в этом состоянии до тех пор, пока на клавиатуре не будет нажата любая клавиша. Для сброса компьютера по традиции обычно используется нажатие трех клавиш Ctrl+Alt+Del. Я отказался от этого варианта, использовав для формирования сигнала /RES факт нажатия клавиши Print Screen. Дело в том, что в прошивке «Кворума 128», которую я когда-то делал, после /RES анализируются клавиши Caps Shift и Symbol Shift и при их нажатии по Сбросу выход идет либо в Basic 48, либо в Basic 128. Формирование импульса на выходе PD5 (/NMI) происходит при нажатии клавиши F12. Теперь о принципе формирования кодов матрицы клавиатуры. Скан-коды 102 клавиш клавиатуры IBM в режиме 3 имеют уникальный код в диапазоне от 01h до 84h (некоторые коды не задействованы). При нажатии этот код однократно передается по последовательному интерфейсу в контроллер, а при отжатии в начале передается префиксный код (0F0h), а затем ее скан-код. Эти скан-коды принимаются и при нажатии запоминаются в буфере, а при отжатии удаляются из него. Судя по описанию на Z8602/14/15 - один из контроллеров для клавиатур от фирмы Zilog, существует ограничение на число одновременно нажатых клавиш на клавиатуре IBM. В частности в этом контроллере поддерживается до 6 одновременно нажатых клавиш. Из этих соображений размер буфера для нажатых клавиш в контроллере установлен равным 8 (небольшой запас не помешает). Теперь необходимо взять скан-коды нажатых клавиш из буфера и сформировать по ним коды соответствующие замкнутым контактам в матрице клавиатуры Спектрума. Для этого используем следующий подход - каждому скан-коду клавиши IBM приведем в соответствие байт в таблице со следующей структурой: D7 - флаг клавиши Caps Shift; D6 - флаг клавиши Symbol Shift; D5..D3 - номер адресной линии в матрице клавиатуры; (000 - A08 … 111 - A15) D2..D0 - номер бита данных в матрице клавиатуры; (001 - KD0 ... 101 - KD4) Номера битов шины данных в коде специально считаются от 1 для того, что бы использовать нулевое значение байта в таблице для скан-кодов, которые не требуют преобразования. Дополнительно введем еще код выбора альтернативной таблицы кодировки, признаком которого будет одновременная установка флагов Caps Shift и Symbol Shift. В соответствии с этим введем следующие обозначения: CapSh equ 10000000b ; флаг нажатия клавиши Caps Shift SymSh equ 01000000b ; флаг нажатия клавиши Sуmbol Shift ALTtb equ CSH+SSH ; признак альтернативной таблицы. ; адресные коды A08 equ 00000000b A09 equ 00001000b A10 equ 00010000b A11 equ 00011000b A12 equ 00100000b A13 equ 00101000b A14 equ 00110000b A15 equ 00111000b ; коды данных D0 equ 00000001b D1 equ 00000010b D2 equ 00000011b D3 equ 00000100b D4 equ 00000101b Теперь в соответствии с рис. 1 каждому узлу в матрице клавиатуры Спектрума можно задать его код, обозначив соответственно: Kl_CS equ A08+KD0 ; Caps Shift Kl_Z equ A08+KD1 Kl_X equ A08+KD2 Kl_C equ A08+KD3 Kl_V equ A08+KD4 Kl_A equ A09+KD0 Kl_S equ A09+KD1 Kl_D equ A09+KD2 Kl_F equ A09+KD3 Kl_G equ A09+KD4 Kl_Q equ A10+KD0 Kl_W equ A10+KD1 Kl_E equ A10+KD2 Kl_R equ A10+KD3 Kl_T equ A10+KD4 Kl_1 equ A11+KD0 Kl_2 equ A11+KD1 Kl_3 equ A11+KD2 Kl_4 equ A11+KD3 Kl_5 equ A11+KD4 Kl_0 equ A12+KD0 Kl_9 equ A12+KD1 Kl_8 equ A12+KD2 Kl_7 equ A12+KD3 Kl_6 equ A12+KD4 Kl_P equ A13+KD0 Kl_O equ A13+KD1 Kl_I equ A13+KD2 Kl_U equ A13+KD3 Kl_Y equ A13+KD4 Kl_CR equ A14+KD0 ; Enter Kl_L equ A14+KD1 Kl_K equ A14+KD2 Kl_J equ A14+KD3 Kl_H equ A14+KD4 Kl_SP equ A15+KD0 ; Space Kl_SS equ A15+KD1 ; Symbol Shift Kl_M equ A15+KD2 Kl_N equ A15+KD3 Kl_B equ A15+KD4 Такой способ кодирования позволяет каждому скан-коду привести в соответствие номер адресной линии и номер бита данных. А так же сформировать из буфера содержащего скан-коды нажатых клавиш, еще один буфер из 8 байт, каждый из которых привязан к запрошенной при сканировании адресной линии и содержит логический «0» в позиции замкнутого узла матрицы. Флаги Symbol Shift и Caps Shift позволяют заданным клавишам обеспечивать двойное нажатие. Введя такие обозначения, теперь достаточно просто создать таблицу соответствия скан кодов IBM-клавиатуры, кодам, выдаваемым по запросу чтения порта клавиатуры Спектрума. Эта таблица специально вынесена в отдельное жестко заданное адресное пространство микроконтроллера, что позволяет ее модифицировать и компилировать отдельно от программной части микроконтроллера, в которой ее адрес прописан. Теперь о флаге альтернативной таблицы. Он введен для того, чтобы ввести привязку кодов для клавиш, имеющих в зависимости от нажатия клавиши Shift на IBM-клавиатуре двойное значение. Например, клавиша с кодами «:» (двоеточие без Shift) и «;» (точка с запятой с Shift). А также для клавиш, которые на IBM-клавиатуре имеют отличающееся от Спектрума назначение. Например, клавиша «8» на клавиатуре Спектрума с Symbol Shift выдает «(« (открывающая круглая скобка), а на клавиатуре IBM она обозначена как «*» (знак умножения при нажатии с Shift). В основной таблице для альтернативных клавиш к признаку ALT добавляется адрес, по которому в дополнительной таблице располагаются два кода соответствующие двум кодовым значениям (первое без Shift, второе с Shift). Принцип кодировки такой же, как и в первой таблице за исключением того, что теперь клавишам можно задать тройное нажатие - основной код плюс два флага Shift. Как оказалось создание таблицы кодировки не тривиальная задача и зависит от пристрастий пользователя. Поэтому на сегодняшний день имеется как минимум два варианта: авторский, который исходил чисто из логических соображений, и вариант Александра Шушкова, который я бы назвал пользовательским, поскольку он исходил, как я понимаю, из удобства пользования клавиатурой. Теперь о том, что касается подключения контроллера клавиатуры к конкретным моделям Спектрум-совместимых компьютеров. Его можно подключить в том виде, как он представлен на схеме. Но на практике оказалось, что во многих случаях можно упростить схему контроллера, использовав в качестве буфера адреса уже имеющиеся в схемах этих компьютеров регистры. Это касается в частности «Профи», «Пентагона», «АТМ», «Скорпиона», «Кая» и некоторых других моделей, у которых адресная шина процессора перед клавиатурой буферирована. Чаще всего такой буфер включен в режим постоянной выборки (вход /OE заземлен). Если этот вход буфера отключить от земли и подать на него сигнал с выхода PD6 микроконтроллера, тогда необходимость в буфере DD2 (АП6) отпадает. Развязывающие диоды надо будет из схемы исключить, запаяв вместо них перемычки, а подтягивающие резисторы R5..R12 можно не устанавливать. Во многих случаях можно отказаться и от установки отдельного кварца на микроконтроллере, подав на его вывод 5 сигнал с генератора Спектрума. При этом как показал опыт, хотя для AT90S2313 нормируется тактовая частота до 10 МГц, большинство экземпляров прекрасно работает на частоте 14 МГц. В крайнем случае, можно подать и 7 или 8 МГц с контроллера TRDOS. Сигнал /WAIT в схемах многих компьютеров либо не задействован и на него подается через резистор напряжение +5V (логическая «1»), либо на него подается сигнал /WAIT с других узлов компьютера. Для работы с контроллером клавиатуры необходимо все сигналы /WAIT на входе Z80 объединить по схеме «И». Проще всего это сделать, если на входе процессора Z80 (вывод 24) установить резистор с номиналом порядка 1-3 КОм, а все сигналы /WAIT подавать на него через развязывающие диоды (также как включен диод VD4). По поводу разъемов подключения клавиатуры. В основном теперь продаются клавиатуры PS/2 с разъемом типа MiniDIN с 6 контактами. Но у многих, наверное, сохранились AT-клавиатуры с 5-контакными вилками типа СГ-5 (импортные типа DIN-5). На рис. 5 показана цоколевка этих разъемов. Несколько слов о программировании микроконтроллера AT90S2313. При выпуске все микроконтроллеры выпускаются с разрешенным режимом низковольтного программирования и поэтому могут легко и просто быть запрограммированы с помощью простейшего устройства, подключаемого к LPT-порту любого IBM PC. Существует свободно распространяемая программа «FBPRG», которая позволяет записать заданную прошивку в микроконтроллер. Вполне вероятно, что скоро такая программа появится и для Спектрума, оснащенного портом принтера. Таким образом, любой желающий сможет достаточно легко собрать этот контроллер клавиатуры и подключить его к своему любимому Спектруму. Ну а теперь таблицы кодировки клавиш: Во втором столбце (после знака точки с запятой «;») стоит скан-код IBM, сразу за ним идет клавиша IBM. ; Таблица скан-кодов клавиш AT ;(скан-коды до 06h не используются). tab_kbd: DB 0FFH ;06h DB SymSh+Kl_Q ;07h F1 DB CapSh+Kl_SS ;08h ESC ;скан-коды следующих 4 клавиш ;в программе перемещены в это место таблицы ;(а эти скан-коды в IBM не задействованы). DB SymSh+Kl_J ;09h/84h [-] DB SymSh+Kl_CR ;0Ah/81h Left Flying Windows DB SymSh+Kl_CR ;0Bh/82h Right Flying Windows DB CapSh+Kl_CR ;0Ch 83h Menu ;-- DB CapSh+Kl_1 ;0Dh Tab (CapSh+ <1> Edit) DB AltTb+0 ;0Eh "/~ -> AltTab DB SymSh+Kl_W ;0Fh F2 ; DB 0FFH ;10h DB Kl_CS ;11h Left Ctrl CapSh DB Kl_SS ;12h Left Shift SymSh DB 0FFH ;13h DB CapSh+Kl_2 ;14h Caps Lock DB Kl_Q ;15h Q DB Kl_1 ;16h 1/! DB SymSh+Kl_E ;17h F3 DB 0FFH ;18h DB CapSh+Kl_3 ;19h Left Alt DB Kl_Z ;1Ah Z DB Kl_S ;1Bh S DB Kl_A ;1Ch A DB Kl_W ;1Dh W DB Kl_2 ;1Eh 2/@ DB SymSh+Kl_Y ;1Fh F4 ; DB 0FFH ;20h DB Kl_C ;21h C DB Kl_X ;22h X DB Kl_D ;23h D DB Kl_E ;24h E DB Kl_4 ;25h 4/$ DB Kl_3 ;26h 3/# DB SymSh+Kl_U ;27h F5 DB 0FFH ;28h DB Kl_Sp ;29h SPACE DB Kl_V ;2Ah V DB Kl_F ;2Bh F DB Kl_T ;2Ch T DB Kl_R ;2Dh R DB Kl_5 ;2Eh 5/% DB SymSh+Kl_I ;2Fh F6 ; DB 0FFH ;30h DB Kl_N ;31h N DB Kl_B ;32h B DB Kl_H ;33h H DB Kl_G ;34h G DB Kl_Y ;35h Y DB Kl_6 ;36h 6/^ DB SymSh+Kl_A ;37h F7 DB 0FFH ;38h DB CapSh+Kl_4 ;39h Right Alt DB Kl_M ;3Ah M DB Kl_J ;3Bh J DB Kl_U ;3Ch U DB Kl_7 ;3Dh 7/& DB AltTab+11 ;Kl_8 ;3Eh 8/* -> AltTab DB SymSh+Kl_S ;3Fh F8 ; DB 0FFH ;40h DB AltTb+1 ;41h ,/< -> AltTab DB Kl_K ;42h K DB Kl_I ;43h I DB Kl_O ;44h O DB AltTab+13 ;Kl_0 ;45h 0/) -> AltTab DB AltTab+12 ;Kl_9 ;46h 9/( -> AltTab DB SymSh+Kl_D ;47h F9 DB 0FFH ;48h DB AltTb+2 ;49h ./> -> AltTab DB AltTb+3 ;4Ah //? -> AltTab DB Kl_L ;4Bh L DB AltTb+4 ;4Ch ;/: -> AltTab DB Kl_P ;4Dh P DB AltTb+5 ;4Eh -/_ -> AltTab DB SymSh+Kl_F ;4Fh F10 ; DB 0FFH ;50h DB 0FFH ;51h DB AltTb+6 ;52h "/> -> AltTab DB 0FFH ;53h DB AltTb+7 ;54h [/{ -> AltTab DB AltTb+8 ;55h =/+ -> AltTab DB CapSh+Kl_9 ;56h F11 DB 000H ;57h Print Screen -> RESET ; скан-коды правых клавиш Ctrl и Shift ;в программе заменяются скан-кодами их левых аналогов. DB 000H ;58h Right Ctrl -> 11h DB 000H ;59h Right Shift -> 12h DB Kl_CR ;5Ah ENTER DB AltTb+9 ;5Bh ]/} -> AltTab DB AltTb+10 ;5Ch \/| -> AltTab DB 0FFH ;5Dh DB 000H ;5Eh F12 -> NMI DB 000H ;5Fh Scroll Lock ; DB CapSh+Kl_6 ;60h [Down] DB CapSh+Kl_5 ;61h [Left] DB 000H ;62h Pause/Break -> WAIT DB CapSh+Kl_7 ;63h [Up] DB CapSh+Kl_Y ;64h [Delete] DB CapSh+Kl_Z ;65h [End] DB CapSh+Kl_0 ;66h BackSpace DB CapSh+Kl_V ;67h [Insert] DB 0FFH ;68h DB Kl_1 ;69h [1] DB CapSh+Kl_8 ;6Ah [Right] CapSh+ <8> DB Kl_4 ;6Bh [4] DB Kl_7 ;6Ch [7] DB CapSh+Kl_R ;6Dh [PageDown] DB CapSh+Kl_W ;6Eh [Home] DB CapSh+Kl_C ;6Fh [PageUp] DB Kl_0 ;70h [0] DB SymSh+Kl_M ;71h [.] DB Kl_2 ;72h [2] DB Kl_5 ;73h [5] DB Kl_6 ;74h [6] DB Kl_8 ;75h [8] DB 000H ;76h NumLock DB SymSh+Kl_V ;77h [/] DB 0FFH ;78h DB Kl_CR ;79h [ENTER] DB Kl_3 ;7Ah [3] DB 0FFH ;7Bh DB SymSh+Kl_K ;7Ch [+] DB Kl_9 ;7Dh [9] DB SymSh+Kl_B ;7Eh [*] DB 0FFH ;7Fh ; Таблица клавиш с двумя кодами: ; 1 код - без Shift, 2 код - с Shift ORG 47AH AltTab: DB SymSh+Kl_X,SymSh+Kl_A ;0Eh "/~ -> AltTab+0 DB SymSh+Kl_N,SymSh+Kl_R ;41h ,/< -> AltTab+1 DB SymSh+Kl_M,SymSh+Kl_T ;49h ./> -> AltTab+2 DB SymSh+Kl_V,SymSh+Kl_C ;4Ah //? -> AltTab+3 DB SymSh+Kl_O,SymSh+Kl_Z ;4Ch ;/: -> AltTab+4 DB SymSh+Kl_J,SymSh+Kl_0 ;4Eh -/_ -> AltTab+5 DB SymSh+Kl_7,SymSh+Kl_P ;52h "/> -> AltTab+6 DB SymSh+Kl_Y,SymSh+Kl_F ;54h [/{ -> AltTab+7 DB SymSh+Kl_L,SymSh+Kl_K ;55h =/+ -> AltTab+8 DB SymSh+Kl_U,SymSh+Kl_G ;5Bh ]/} -> AltTab+9 DB SymSh+Kl_D,SymSh+Kl_S ;5Ch \/| -> AltTab+10 DB Kl_8,SymSh+Kl_B ;3Eh 8/* -> AltTab+11 DB Kl_9,SymSh+Kl_8 ;46h 9/( -> AltTab+12 DB Kl_0,SymSh+Kl_9 ;45h 0/) -> AltTab+13 |