Опробовал загрузку с HX через консоль, подключенную через DECserver - пашет. Один минус, что-то сделать с сессией после подключения уже нельзя - надо с соседнего терминала отцеплять :)
Вид для печати
Опробовал загрузку с HX через консоль, подключенную через DECserver - пашет. Один минус, что-то сделать с сессией после подключения уже нельзя - надо с соседнего терминала отцеплять :)
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_18.11.13_17-57
Изменения:
1. Исправлена генерация клавишами кодов букв. Например - в предыдущих версиях было невозможно ввести с клавиатуры маленькие русские буквы "х ж э б ю" в режиме CapsLock.
...
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_19.12.13_00-19
Изменения:
1. Исправлены несколько ошибок, в том числе серьёзная ошибка во всех классах виджетов, приводившая к неопределённому поведению при закрытии конфига с виджетами на полосах окон ( таких конфигов пока не было ).
2. Теперь окно любой консоли ( кроме системной консоли конфига ) можно очистить, нажав <Ctrl><Delete> ( на формирование лога консоли очистка окна не влияет ).
3. В объект Console добавлено скрытое состояние ClearScreen, активирующее очистку окна консоли при переводе этого состояния в положение ON.
4. Число строк в текстовом буфере обычной консоли увеличено с 400 до 1000.
А с использованием чего написаны твои эмуляторы? MFC? WinAPI? Или еще что? Ты пользовался конструктором форм (если он в данной среде есть), или все ручками?
Только голый Win32API + модульный API моей разработки ( он, похоже, уже сложнее ранних версий UNIX ).
Процитирую классика (jwz):
:)Цитата:
Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can.
Переведу для руссоязычных цитату Джанислова Вежи Зеленеца (ведь каждый русскоязычный знает, что аббревиатура jwz переводится именно так):
'Любая программа пытается расширять свой функционал до тех пор, пока не сможет читать почту. Те программы, которые до такой степени усложниться не могут, заменяются теми, которые смогут.'
Patron, Не могу создать соединение pdp11+vt52 через компорт. Если первым загружаю pdp11 то конфиг проходит нормально но на vt52 не проходит. Так-же и наоборот загружаю первым vt52 конфиг проходит но на pdp11 нет.Где подправить нужно?
p.s. На ip конфигурации работает отлично.
А драйвер com0com установлен ?
Если нет - надо скачать и установить. В списке COM-портов появятся ещё два порта и вот их и надо указывать в настройках - один порт в одной программе, а другой - в другой программе.
Когда в компьютере только один COM-порт - две программы через него общаться не могут. Для связи через COM-порт всегда надо ДВА соединённых порта.
Patron, Сейчас уже на мат. платы коп порты почти не устанавливают, как и сокращают pci до одного. Предлагаю данный драйвер включить в сборку+инструкцию в шапку дописать.
Нет
---------- Post added at 16:47 ---------- Previous post was at 16:27 ----------
То-есть не могут поделить ресурс?
Получается без драйвера надо порты соединить нуль модемным кабелем на одном компьютере.
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_30.12.13_17-00
Изменения:
1. В объект Terminal добавлен базовый параметр KeyboardLayout ( файл Terminal.ini ), задающий раскладку клавиатуры. Возможные значения:
1.1. KeyboardLayout = ENG+RUS - раскладки QWERTY и ЙЦУКЕН переключаются в зависимости от состояния вывода Rus/Lat.
1.2. KeyboardLayout = ENG - всегда установлена раскладка QWERTY ( для клавиатур без русских букв ).
1.3. KeyboardLayout = RUS - всегда установлена раскладка ЙЦУКЕН, модифицированная для максимального соответствия клавиатуре ДВК.
Нажатие клавиш во всех возможных режимах даёт такие результаты:
Код:KeyboardLayout = ENG+RUS | KeyboardLayout = RUS | KeyboardLayout = ENG
======================== | ==================== | ====================
| |
LAT+CapsLock | LAT+CapsLock | LAT+CapsLock
~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~
`1234567890-=\ | ;1234567890-,. | `1234567890-=\
QWERTYUIOP[] | JCUKENG[]ZH: | QWERTYUIOP[]
ASDFGHJKL;' | FYWAPROLDV\ | ASDFGHJKL;'
ZXCVBNM,./ | Q^SMITXB@/ | ZXCVBNM,./
| |
| |
LAT+CapsLock+Shift | LAT+CapsLock+Shift | LAT+CapsLock+Shift
~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~
~!@#$%^&*()_+| | +!"#$%&'()_=<> | ~!@#$%^&*()_+|
qwertyuiop{} | jcukeng{}zh* | qwertyuiop{}
asdfghjkl:" | fywaproldv| | asdfghjkl:"
zxcvbnm<>? | q~smitxb`? | zxcvbnm<>?
| |
| |
LAT | LAT | LAT
~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~
`1234567890-=\ | ;1234567890-,. | `1234567890-=\
qwertyuiop[] | jcukeng[]zh: | qwertyuiop[]
asdfghjkl;' | fywaproldv\ | asdfghjkl;'
zxcvbnm,./ | q^smitxb@/ | zxcvbnm,./
| |
| |
LAT+Shift | LAT+Shift | LAT+Shift
~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~
~!@#$%^&*()_+| | +!"#$%&'()_=<> | ~!@#$%^&*()_+|
QWERTYUIOP{} | JCUKENG{}ZH* | QWERTYUIOP{}
ASDFGHJKL:" | FYWAPROLDV| | ASDFGHJKL:"
ZXCVBNM<>? | Q~SMITXB`? | ZXCVBNM<>?
| |
| |
| |
RUS+CapsLock | RUS+CapsLock | RUS+CapsLock
~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~
1234567890-=/ | ;1234567890-,. | Ч1234567890-=Э
ЙЦУКЕНГШЩЗХъ | ЙЦУКЕНГШЩЗХ: | ЯВЕРТЫУИОПШЩ
ФЫВАПРОЛДЖЭ | ФЫВАПРОЛДЖЭ | АСДФГХЙКЛ;'
ЯЧСМИТЬБЮ. | ЯЧСМИТЬБЮ/ | ЗЬЦЖБНМ,./
| |
| |
RUS+CapsLock+Shift | RUS+CapsLock+Shift | RUS+CapsLock+Shift
~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~
!ю#¤%ч&*()+? | +!"#¤%&'()ъ=<> | ч!ю#¤%Ю&*()ъ+э
йцукенгшщзхъ | йцукенгшщзх* | явертыуиопшщ
фывапролджэ | фывапролджэ | асдфгхйкл:"
ячсмитьбю, | ячсмитьбю? | зьцжбнм<>?
| |
| |
RUS | RUS | RUS
~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~
1234567890-=/ | ;1234567890-,. | ч1234567890-=э
йцукенгшщзхъ | йцукенгшщзх: | явертыуиопшщ
фывапролджэ | фывапролджэ | асдфгхйкл;'
ячсмитьбю. | ячсмитьбю/ | зьцжбнм,./
| |
| |
RUS+Shift | RUS+Shift | RUS+Shift
~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~
!ю#¤%ч&*()+? | +!"#¤%&'()ъ=<> | Ч!ю#¤%Ю&*()ъ+Э
ЙЦУКЕНГШЩЗХъ | ЙЦУКЕНГШЩЗХ* | ЯВЕРТЫУИОПШЩ
ФЫВАПРОЛДЖЭ | ФЫВАПРОЛДЖЭ | АСДФГХЙКЛ:"
ЯЧСМИТЬБЮ, | ЯЧСМИТЬБЮ? | ЗЬЦЖБНМ<>?
Patron, Я подключил клавиатуру МС7004 через ком порт а терминал выдаёт не те символы. Нажимаю Й выдаёт Ь ,нажимаю С выдаёт хЬ. Может у клавиатуры свой протокол?
Клавиатура МС 7004 шлёт сканкоды ( см. приложение ).
Я могу написать адаптер для этой клавиатуры, но надо записать коды нажатия ( и, если есть - коды отжатия ) для всех без исключения её клавиш.
В файл конфигурации можно добавить следующие строки:
на панели закладок появится окно "Dump" с консолью, на которую будут выводиться байты, поступающие из COM-порта. Содержимое консоли также будет писаться в файл Dump.logКод:[objects]
Dump = Ядро:Console
[links]
ComPort > Dump
[Dump.ini]
InitialStateOf[Log] = 1
DumpMode = 7
После нажатия всех клавиш - можно зажать пробел и убедиться, что при автоповторе МС 7004 шлёт не код нажатой клавиши, а специальный код автоповтора.
Затем файл Dump.log надо заархивировать и выложить здесь. После этого я напишу фильтр для потока байтов, преобразующий входной поток формата МС 7004 в выходной поток формата ASCII.
...
Спасибо Патрон,только пока ничего не могу сделать. У меня не все клавиши работают.
Патрон,пришлось вручную набивать сканкоды, так-как есть от 3х значных до 10и значных кодов. Я думаю запутался-бы.
Сканкоды.
Скрытый текст
Стоп Кадр 170 346
Печать Кадра 176 346
Пауза 200 346
Уст. Режима 206 346
Ф5 230 346
Прерыв. 140 216
Продолж. 146 216
Отмен. 170 216
Основн.Кадр 176 216
Выход 200 236
Ф11ар2 006 376
Ф12вш 030 376
Ф13пс 036 376
Доп.Вариант 140 376
Пм 340 376
Исп 346 376
Ф17 1000 000
Ф18 006 360
Ф19 030 360
Ф20 036 360
( 340
; 376 376
1 1000 000
2 146 370
3 236 370
4 1000 000 376
5 170 376
6 236 376
7 1000 000
8 146 376
9 230 376
0 140 176
- 206
) 146
206 370
Зб 340 376
Нт 230 340
Вст 236 340
Удал 340 340
Пф1 006 346
Пф2 030 346
Пф3 036 346
Пф4 140 346
Таб 370 346
Й 006 370
Ц 170 370
У 340 370
К 006 376
Е 176 376
Н 340 376
Г 006 376
Ш 170 376
Щ 236 376
З 1000 000
Х 170
: 230
~ 140 370
Вк 346 376
Выбр 346 340
Пред Кадр 370 340
След Кадр 376 340
7 346 370
8 370 370
9 376 370
, 340 370
Су (Нажата) 376 346
Су (Отжата) 036 376
Фкс 1000 000 376
Ф 030 370
Ы 176 370
В 346 370
А 030 376
П 200 376
Р 346 376
О 030 376
Л 176 376
Д 340 376
Ж 030
Э 236
. 176
Ъ 346
(Вверх) 230 346
4 206 370
5 230 370
6 236 370
- 1000 000 376
Вр (Нажата) 370 346
Вр (Отжата) 036 376
Рус/Лат 030 376
Я 036 370
Ч 200 370
С 370 370
М 036 376
И 206 376
Т 370 376
Ь 036 376
Б 200 376
Ю 346 376
, 036
/ 230 370
_ 006
Вр (Нажата) 370 346
Вр (Отжата) 036 376
(Влево) 176 346
(Вниз) 206 346
(вправо) 200 346
1 170 370
2 176 370
3 200 370
. 140 370
кмп 006 376
пробел 140 376
0 030 370
ввод 146 370
автоповтор 140 376
[свернуть]
Похоже, что COM-порт настроен в эмуляторе на скорость 9600, поэтому принимает по два байта при каждом нажатии, хотя клавиатура передаёт по одному байту на скорости 4800;8N1.
Чтобы в эмуляторе настроить COM-порт на скорость клавиатуры МС 7004 - надо установить следующие настройки в файле Terminal_ComPort_Adapter.ini:
Код:BaudRate = CBR_4800
Parity = NOPARITY
StopBits = ONESTOPBIT
ByteSize = 8
Сканкоды при 4800
264 автоповтор
Супер!
Все коды совпадают с описанием, кроме [~] и [ъ], которые в описании указаны наоборот: ~ = 375 ; ъ = 304.
Скорее всего в описании ошибка - вряд ли отдельные клавиатуры могут путать коды клавиш..
Сканкоды ( восьмеричные ), полученные от клавиатуры МС 7004:
Код:Стоп Кадр 126
Печать Кадра 127
Пауза 130
Уст. Режима 131
Ф5 132
Прерыв. 144
Продолж. 145
Отмен. 146
Основн.Кадр 147
Выход 150
Ф11 (АР2) 161
Ф12 (ВШ) 162
Ф13 (ПС) 163
Доп.Вариант 164
ПМ 174
ИСП 175
Ф17 200
Ф18 201
Ф19 202
Ф20 203
{ | 374
; + 277
1 ! 300
2 " 305
3 # 313
4 $ 320
5 % 326
6 & 333
7 ' 340
8 ( 345
9 ) 352
0 357
- = 371
} 365
пустая клавиша 311
ЗБ 274
НТ 212
ВСТ 213
УДАЛ 214
Пф1 241
Пф2 242
Пф3 243
Пф4 244
ТАБ 276
Й J 301
Ц C 306
У U 314
К K 321
Е E 327
Н N 334
Г G 341
Ш [ 346
Щ ] 353
З Z 360
Х H 366
: * 372
~ 304
ВК 275
ВЫБР 215
ПРЕД КАДР 216
СЛЕД КАДР 217
7 235
8 236
9 237
, 234
СУ (Нажата) 257
СУ (Отжата) 263
ФКС 260
Ф F 302
Ы Y 307
В W 315
А A 322
П P 330
Р R 335
О O 342
Л L 347
Д D 354
Ж V 362
Э \ 373
. > 367
Ъ 375
(Вверх) 252
4 231
5 232
6 233
- 240
ВР (Нажата) 256
ВР (Отжата) 263
РУС/ЛАТ 262
Я Q 303
Ч ^ 310
С S 316
М M 323
И I 331
Т T 336
Ь X 343
Б B 350
Ю @ 355
, < 363
/ ? 312
_ 361
Вр (Нажата) 256
Вр (Отжата) 263
(Влево) 247
(Вниз) 251
(Вправо) 250
1 226
2 227
3 230
. 224
КМП 261
Пробел 324
0 222
ВВОД 225
автоповтор 264
Для сравнения - сканкоды ( шестнадцатеричные ) клавиатуры LK201:
http://www.netbsd.org/docs/Hardware/...e_keycodes.jpg
Да что загадочного, оригинал с которого делали МС 7004
1. Надо бы протестировать, какие коды будет генерить МС 7004, если при нажатой клавише <СУ> нажать и отпустить <ВР>. Судя по описанию LK201 - при отпускании <ВР> в этом случае сгенерится 256 ( т.е. тот же код, что и при нажатии <ВР> ), а при отпускании <СУ> - код 263.
2. Если при нажатой <СУ> нажать <ВР> и отпустить <СУ> - то при отпускании <СУ> ( похоже ) должен сгенериться код 257 ( т.е. тот же код, что и при нажатии <СУ> ), а при отпускании <ВР> - код 263.
3. Можно настроить в терминале клавишу <F12> на отправку в МС 7004 кода сброса, для чего добавить в раздел [VT52.ini] в используемом файле конфигурации параметр ANSI_STR_FOR_KEY[F12]:
Из окна терминала отправить в МС 7004 код сброса. Ответ должен быть 001 000 000 000.Код:[VT52.ini]
ANSI_STR_FOR_KEY[F12] = "\375"
Горит ли после сброса лампочка [ ЛАТ ] на МС 7004 ?
Клавиатура МС 7004 имеет свое firmware, которое не совпадает с firmware LK201. И кое-что из того, что может LK201, МС 7004 не может. Что бы особо не гадать, дизассемблированную прошивку МС7004 я уже выкладывал здесь, заодно там же и для КСМ. Отсюда можно скачать документацию на МС 7004, выглядит получше, чем ранее выложенная.
А в чем проблема? Контроллер вроде простой, схема клавиатуры есть, ассемблер простенький. Если малопонятные комментарии, то прошу прощения, так написал. Конструктивную критику с удовольствием приму.
Мне дает, т.к. я это фирмваре и дизассемблировал и вникал в принцип работы. Хотя с тех времен кое-что уже подзабылось.
нажать <СУ> - 0257 (0xAF)
нажать левый <ВР> - 0256 (0xAE)
нажать правый <ВР> - 0256 (0xAE)
отпустить <СУ> - 0263 (0xB3)
отпустить левый <ВР> - 0263 (0xB3)
отпустить правый <ВР> - 0263 (0xB3)
Да, внутри себя клавиатура различает левый и правый ВР, но наружу идет один код 0256. Так что, если пришло два кода 0256, значит нажали два ВР-а. А вот с отжатием плохо - всегда передается код 0263. Клавиатура внутри запоминает три нажатых клавиши (кроме СУ и ВР-ов), код автоповтора только один - 0264.
По виду исходника у меня создалось впечатление, что если нажать один ВР - нажатие другого не генерит кодов, как и отжатие ВР, если другой нажат.
Кроме этого, если при нажатом СУ нажать ВР и отжать СУ - клавиатура должна при отжатии СУ послать код нажатия СУ - иначе она не будет совместима с родными операционками Pro-350.
По стандарту LK201 - код отжатия передаётся только для последней отжатой клавиши <СУ> | <ВР>. Когда при отжатии <СУ> | <ВР> - другая клавиша ещё нажата - должен передаваться код нажатия отжимаемой клавиши, а не код отжатия. Только так клавиатура сможет работать с родными операционками Pro-350.
Откуда такое впечатление? Проверка кодов идет по адресам 0x18C-0x197, там только проверяется, что при сканировании матрицы клавиатуры клавиши СУ и ВР-ы находятся в нажатом состоянии. А уже далее, если они нажаты, проводится их обработка. Ячейка с адресом 0x36 содержит признаки нажатия на регистровые клавиши: 0 бит - СУ, 1 бит - правый ВР, 2 бит - левый ВР. Соответственно обработка их нажатия проводится по адресам: 0x1CD - 0x1D4 - СУ, 0x1D5 - 0x1E1 - левый ВР, 0x1E2 - 0x1EE - правый ВР. Суть обработки заключается в том, что если клавиша уже нажата (стоит бит признака), то ничего не делаем, а иначе ставим соответствующий бит и передаем код в ЭВМ (или терминал), при этом код правого ВР (0x00) заменяется на код левого ВР (0xAE).
Уж не знаю как там в LK201, его фирмваре я не смотрел, а у нас в МС 7004 обработка отжатия регистровых клавиш идет по адресам 0x200-0x236. Смысл их такой, что если шло сканирование регистровой клавиши, а она была не нажата, а ее признак нажатия установлен, то соответствующий признак сбрасывается и посылается код 0xB3.
Вот поэтому впечатление и возникло. Типа, если нажата одна из клавиш ВР - при обработке нажатия/отжатия другой клавиши ВР ничего не делаем.
Код 0xB3 называется ALL_UP ( все UP_DOWN-клавиши отжаты ). Если нажать СУ и ВР - драйвер клавиатуры получит коды нажатия СУ и ВР и установит флаги СУ и ВР. Если при отжатии одной из этих клавиш придёт код ALL_UP - драйвер обязан сбросить все флаги, иначе он окажется в неопределённом состоянии.
Поэтому, чтобы отжатие СУ при нажатой ВР могло быть правильно опознано драйвером клавиатуры - отжатие СУ при нажатой ВР должно посылать код нажатия СУ, а отжатие ВР при нажатой СУ - должно посылать код нажатия ВР.
Там же в архиве была и прошивка КСМ. Подпрограмма по адресу 0x587 обрабатывает этот код отжатия. Сначала проверяется признак нажатия СУ, ну и если нажата, то признак сбрасывается. А вот если СУ не нажата, то тогда жестко очищается признак нажатия ВР.
---------- Post added at 18:01 ---------- Previous post was at 17:55 ----------
А зачем нам родная операционка? Родная ничего не знает про клавишу РУС/ЛАТ, а на МС 7004 она есть, а на LK201 её нет.
Похоже, что разработчики МС 7004 просто не поняли, в чём суть. Какой смысл отдельно обрабатывать нажатия двух клавиш ВР и при этом дважды посылать одинаковый код нажатия, тогда как в LK201 такого в принципе не может быть, т.к. тогда при нажатой СУ невозможно было бы отличить отжатие первой нажатой ВР от нажатия второй.
Посмотрел документацию на LK201, большое отличие по аппаратной части от МС 7004, да и такое ощущение, что LK201 на голову выше МС 7004. У МС 7004 опрос клавиатуры идет побитно, выбирается необходимая строка и столбец из матрицы и смотрится состояние триггера два раза через небольшой интервал времени (дребез контактов таким образом проверяют программно). У LK201 опрос идет побайтно, есть шестнадцать строк, а столбец из 8 бит читается одним махом. У МС 7004 на пищалку сигнал частотой 2 кГц делается программным способом, дрыгается битик с нужными паузами между переключениями. У LK201 есть генератор частоты на 2 кГц, звук можно включить/выключить, да еще задать восемь уровней громкости. С программной части управления клавиатурой у LK201 тоже все шире, кроме того, что можно узнать идентификатор, прочитать состояние DIP-ов, можно задавать отдельные режимы на разные группы клавиш - как только передавать нажатие, автоповтор, передавать нажатие и отжатие.
СУ нажата 257
ВР нажата 256
ВР отжата 263
СУ отжата 263
СУ нажата 257
ВР нажата 256
СУ отжата 263
ВР отжата 263
при отправке F12 клавиатура молчит. Терминал шлет 106 061 062 040 (замкнул вход на выход без клавиатуры)
п.с. Патрон, добавь пожалуйста очистку экрана в VT52.
1. Нажать СУ, нажать левый ВР, нажать правый ВР, отпустить СУ, отпустить левый ВР, отпустить правый ВР.
2. Нажать 1, пауза около секунды, нажать 2, пауза около секунды, нажать 3, пауза около секунды, нажать 4, пауза около секунды, отпустить 4, пауза около секунды, отпустить 3, пауза около секунды, отпустить 2, пауза около секунды, отпустить 1.