Посмотрим вечером.
Вид для печати
Пашет.
Заглянул в драйвер...
Несколько слов.
Системная библиотека уже содержит макрокоманду .ADDR которая обладает весьма большим функционалом (кроме того что использован здесь). Вряд-ли есть смысл дублировать. Хотя на самом деле в данном драйвере она вообще не нужна (см ниже).Код:.Macro .ADDR x
Mov PC, R0
Add x -., R0
.EndM
Макрокоманда нигде не используется ниже. В XM/ZM работать не будет (если вдруг возникнет желание сделать поддержку для). В системной библиотеке есть замечательная макрокоманда .MTPS для таких целей.Код:.Macro MTPS xx
Mov xx, -(SP)
Mov PC, -(SP)
Add #6, (SP)
RtI
.EndM
Повторение того, что и так делается автоматом. Определение же вручную этих настроек здесь ломает возможность использования драйвера в стандартной процедуре SYSGEN.Код:.IIF NDF RTE$M, RTE$M =: 0
.IIF NDF MMG$T, MMG$T =: 0
.IIF NDF ERL$G, ERL$G =: 0
.IIF NDF TIM$IT, TIM$IT =: 0
Ничего полезного кроме несовместимости с RT-11 V5.0 на уровне исходников не дает: UMRы нам не нужны, error logging не поддерживается, а больше нигде от этих команд пользы нет. Ну разьве что сторонние утилиты могут посмотреть в эти таблицы (система их никак не использует). Зачем нужен .DRPTR без параметров даже придумать не могу.Код:.DrPtr
.DrSpF <373>
Не очень хорошая идея вписываться в докементированные (со времен как минимум 4.0) области заголовка драйвера.Код:. = 116
HXMES:
.ASCIZ <CR><LF>"HX DSK/TTY multiplexer v1.0 2012"<CR><LF>
Если совместимость с самыми древними мониторами не нужна (а в том виде как есть ее и так нет), то можноКод:. = 200 ; DATA DEVICE Installation check
Return
. = 202 ; SYSTEM DEVICE Installation check
воспользоваться макросом .DRINS который предназначен для определения точки инсталяции.
Думаю проще JSR R0 и строка текста после :)Код:.ADDR #HXMES
Кстати, тут как я понимаю готовился .PRINT изначально, мешался драйверу?
Бессмысленный функционал. Драйвер работает с буфером программы и следовательно требует специальной работы с ним для XM. Непонятно зачем испольхуется значение - можно же было сделать [NO]KEY.Код:.DrSet MMGT, 2, O.GEN, NUM
CLC лишний - никто бит C не взводил, да и первая же команда его чистит в явном виде.Код:O.GEN:
Tst R0 ; Arg = 0 ?
BEq 30$
BiS R3, HX.GEN ; Set SYSGEN bit.
Br 31$
30$:
BiC R3, HX.GEN ; Clear SYSGEN bit.
31$:
ClC
Return
В системной библиотеке есть замечательная макрокоманда для этогоКод:.IIF GT .-1000 .ERROR
.ASSUME . LE 1000,MESSAGE=<;SET area overflow>
В начале драйвера есть намек на разные CSRы. Тогда проще сделать поддержку SET HX CSR=xxxxxx.Код:Mov @#TPS, TPSRes
CLR будет короче :)Код:BiC #100, @#TPS
Попутно стоит отметить, что подобное не сработает в многотерминальных системах. Можно добавить проверку и .ERROR (на случай сборки родным SYSGEN) или проверку в подпрограмме инсталяции.
Дальше углубляться не стал. Добавлю еще, что для сборки драйвера неплохо бы LINK/NOBITMAP использовать (что согласно документации в принципе требуется).
Вопрос на засыпку - как проще всего удостовериться, что терминал подключен через HX?
То есть SET команды переделки mapped драйвера в unmapped и наоборот не должно быть в принципе (для I/O устройства это слишком сложно - проще как и положено иметь два драйвера), а для XM надо пользоваться подпрограммами маппинга буфера.
Ругаться же смысла нет поскольку XMу вообще нет никакого дела до файлов xx.SYS, а если усер переименовал его в xxX.SYS, то это его проблемы :)
Я о программном способе - к примеру из загрузчика. Хотя думаю самое простое - просто счетчик попыток ожидания готовности на прием :)
Запустил XM с HX...
DIR, загруженный в верхнюю память, показывает каталог.
Драйвер не оптимизировал, так, попинал слегка от нефиг делать :)
Перечисленное выше не имеет никакого смысла и в нормальном драйвере ничем не поможет. Причина проста: эти директивы всего лишь добавляют лишний код в драйвер, тем самым просто отодвигая дальше вектор системных подпрограмм. Это спасет драйвер от перезаписи его кода значениями этого самого вектора, но никак не поможет драйверу попасть в правильные точки вызова (к примеру в системе с поддержкой device timeout, $INPTR, вызываемый .DRASTом находится на одно слово дальше, а драйвер, скомпиленный без поддержки по прежнему будет вызывать подпрограмму по привычному смещению и тем самым вызовет @$TIMIT вместо @$INPTR).Код:.IIF EQ MMG$T .BlkW 5
.IIF EQ ERL$G .BlkW 1
.IIF EQ TIM$IT .BlkW 1
Данный конкретный драйвер для unmapped системы будет работать и с таким довеском - он просто ничего не вызывает из этого вектора. С mapped драйвером сложнее - там нам нужны вызовы из системного вектора, а если драйвер собран без поддержки таймаута, значение, предназначенное для $TIMIT как раз впишется в точки вызова XMных подпрограмм. Можно правда плюнуть на это так как XM без поддержки device timeout вроде не бывает в принципе.
Правильный метод - использовать .DREND или .DRBOT с FORCE (это правда не решит проблеммы с точками вызовов которые лежат после $TIMIT и $ERLG, но пофиксит в нашем случае XMный драйвер), но к сожалению .DRBOT только в V5.6 научился это делать. Что впрочем не мешает нам собрать драйвер в 5.7 и использовать его потом где угодно :)
Из серии "дурацкая идея": можно засунуть стартовый код в котором будет обычная программа синхронизации с монитором - она спросит файл монитора, прочитает оттуда sysgen слово, пропишет в драйвер и подправит вызовы подпрограмм из вектора, и никаких сетов ;)
Другая дурацкая идея - вызывать все вручную. Какой-то драйвер вроде делал так.
Кстати, SETы переделал на [NO] варианты. Проверять лень было :)
PS. SPFUN я там не переделывал для XM. Принцип тот же, только $PTWRD...
$GTxxx/$PTxxx подпрограммы требуют чтобы R4 смотрел на Q.BLKN.
Подпрограммы упдатят Q.BUFF.
---------- Post added at 18:23 ---------- Previous post was at 18:23 ----------
Сейчас выложу дорайвер в котором SPFUN в XM тоже работает.
---------- Post added at 18:27 ---------- Previous post was at 18:23 ----------
Загрузка получается одна из 10-30 попыток. Если загрузилось - дальше работает. Где-то видимо вылезает разница между полноценным и USBшным COM портом.
Видимо, проблема в том, что ODT_Loader не ждёт завершения ответа эмулятора пульта PDP после передачи строки, а сразу передаёт следующую.
Можно провести эксперимент - взять текст из файла HX Boot.odt, удалить символы имитации <LF> ( '¬' ) и копи-пастить построчно в терминал, посылая <LF> вручную ( клавишей '+' на доп.клавиатуре ). После копирования в терминал предпоследней строки файла HX Boot.odt нужно нажать <CR>.
Всё должно сразу и без проблем загрузиться.
Да вроде все успевает - ни разу не было признаков потерь.
Скорости то дохера :)
---------- Post added at 18:56 ---------- Previous post was at 18:51 ----------
Нет, все-таки есть пропуски.
Думаю ждать ответа не нужно - просто увеличить задержку - иначе какой-нибудь ДВК вообще колом встанет :)
До него как раз и не доходит.
Похоже этот USBшный порт просто тупо накапливает в себе дохера символов и потом большой пачкой херачит их. Во всяком случае в сторону PC это очень сильно заметно в RT-11: делаешь DIR, долгая пауза, херакс - пол экрана мгновенно, пауза, еще пол экрана итд.
---------- Post added at 19:01 ---------- Previous post was at 18:59 ----------
Потом если не лень будет - просто вставлю в 11/83 список загрузчик и буду обычной командой B грузить :)
---------- Post added at 19:06 ---------- Previous post was at 19:01 ----------
Вобщем лень сейчас ковырять. SPFUN так делается:
Код:.IF EQ MMG$T
Mov R1, @(R4)+ ; Report unit size
.IFF
MOV HXCQE,R4
MOV R1,-(SP)
CALL @$PTWRD
.ENDC
Br DONE
Если мы хотим сохранить совместимость по исходным текстам с предыдущими версиями RT-11, то не годится строчка:
Т.к. даже при компиляции в RT-11 V05.04 результат такой:Код:.DrBot HX, START, READ, FORCE=7
Совместимый вариант выглядит так:Код:RT-11SJ V05.04
.MAC/NOOBJ HX
P 611 000004 .IIF EQ ...V3 .ERROR;?SYSMAC-E
-Invalid c o n t r o l value - FORCE=7;
?MACRO-E-Errors detected: 1
=HD3:HX
.
Код:.IIF EQ MMG$T .BlkW 5
.IIF EQ ERL$G .BlkW 1
.IIF EQ TIM$IT .BlkW 1
.DrBot HX, START, READ
Код:RT-11SJ V05.04
.MAC/NOOBJ HX
.
Собственно, возвращаясь к теме терминала... Как бы это от него получить Alt Keypad в VT52? Верхний ряд (который в любом режиме <ESC>P-<ESC>R работает, а остальное шлет коды стрелок и еще чего-то).
Еще при запуске отправляется код CTRL/Q, что не есть хорошо.
А если еще отучить прогу (хотя ьы опционально) трогать лампочку NumLock (и периодически оставлять ее в таком состоянии за пределами программы) - было бы вообще отлично.
При включении/выключении опционально break - стандартное поведение VT52/CM7209.
Ну и пора уже подумать о <ESC>F :)
Во губу раскатал :)
Т.е. как-то иначе, нежели отправкой "\033=" и "\033>" ?
Т.е. при включении посылать BreakOff, а при выключении BreakOn или в обоих случаях посылать BreakOn-пауза-BreakOff ?
Это я тоже заметил.
Осутствие правильных символов псевдографики в системных шрифтах Windows делает это невозможным для универсального текстового терминала.
Через некоторое время в модульном API появится поддержка знакогенераторов с пользовательскими матрицами, но у меня есть только матрица для КСМ, а там псевдографика не такая как у VT52.
С прицелом на будущее нужно заиметь матрицы всех 256 ячеек знакогенератора тех мониторов, поддержку отображения символов которых хотелось бы иметь в дальнейшем.
Относительно NumLock возможны следующие режимы работы терминала, задаваемые константами в файле Terminal.ini:
1. Режим по умолчанию ( имитация клавиатуры 15ИЭ-00-013 )
KeyboardControlling = 1 - терминалу разрешено имитировать нажатия клавиш пользователем.Код:KeyboardControlling = 1
NumLockControlling = 1
NumpadSwapping = 1
Use_NumLock_as_PF1 = 0
NumLockControlling = 1 - терминалу разрешено имитировать нажатие пользователем клавиши NumLock
( при KeyboardControlling = 0 и/или Use_NumLock_as_PF1 = 1 - игнорируется ).
NumpadSwapping = 1 - разрешено переключение отбражения клавиш в зависимости от состояния лампочки NumLock
.......... [NumLock горит] .................................. [NumLock не горит]:
http://s3.hostingkartinok.com/upload...75703d2c06.jpg / http://s2.hostingkartinok.com/upload...f7ba45237d.jpg
Use_NumLock_as_PF1 = 0 - Не использовать клавишу <NumLock> для имитации клавиши <PF1>.
2. Имитация клавиатуры VT52
В таком режиме клавиша <NumLock> в окне терминала используется для имитации клавиши <PF1>, а за пределами окна терминала - для переключения режимов NumLock, которые ни на что в терминале при этом влиять не будут.Код:KeyboardControlling = 1
NumLockControlling = 1 ( значение игнорируется )
NumpadSwapping = 0
Use_NumLock_as_PF1 = 1
3. Плохой вариант
Если в предыдущем режиме установить NumpadSwapping = 1, то при возврате в окно термнала будет происходить переключение отображения блоков клавиш 15ИЭ-00-013 в зависимости то того, горит или нет лампочка NumLock ( при том, что изменить её состояние можно только перейдя из окна терминала в любое другое ).Код:KeyboardControlling = 1
NumLockControlling = 1 ( значение игнорируется )
NumpadSwapping = 1
Use_NumLock_as_PF1 = 1
Идиотский вариант?
Возможно, есть смысл принудительно отключать NumpadSwapping при установке Use_NumLock_as_PF1 = 1..
Нет, именно это у меня не работает.
Доп инфа - NumLock заставляю работать как Gold - без этого и keypad не нужен :)
Проще в обоих случаях, но возможность если делать то отключаемую - иногда наоборот это мешает, а польза пожалуй только в автонастроке скорости подключения на мультиплексорах.
Да, еще пожелание, чтобы запоминал после выходи жирность шрифта, индикатор Alt/Num (по русски не знаю как обозвать второе, первое на УКНЦ ДКЛ обзывается). И курсор высотой в строчную букву (как на родных VT) - это может и есть - просто не знаю :)
SecureCRT выбирает из системных (например Lucida console, Courier New) для основных символов, используемых в псевдографике - как минимум умеет рисовать рамочки и значок переполнения строки для EDT/KED. Правда это для VT1xx/VT2xx, но сути не меняет. А шрифт - это уже для полного счастья если свой делать с вариантами.
VT52 и CM7209 найдем, 15ИЭ кто-нибудь подбросит поди - там вроде греческие буквы были.
На VT52 никаких 256 нету :)
Это всякие УКНЦы да КСМы наверное только умеют.
У меня работает вот это: Use_NumLock_as_PF1 = 1 - то, что собственно требуется. Но циферки независимо от <ESC>= генерят что угодно кроме положенных име <ESC>?x кодов :)
Да, в точности так настроено.
Выдвет циферки в данный момент. Вчера удавалось заставить выдавать <ESC> коды в виде <ESC>x из которых стрелочные соответствовали 4, 8, 2, 6, но это опять не то.
А вроде когда-то еще в эмуляторе ДВК работало у меня все (хотя сейчас уже не вспомню насколько проверял).
По идее если NumLock используется как <GOLD> то переключать должен только код <ESC>= и <ESC>>. В любом случае, сейчас отцепил NumLock от голда, но NumLock переключает совсем не то:
0 - (что так что эдак) 0, должно быть <ESC>?p
1 - <ESC>e, должно быть <ESC>?q
2 - <ESC>B, должно быть <ESC>?r
3 - должно быть <ESC>?s
4 - должно быть <ESC>?t
5 - должно быть <ESC>?u
6 - должно быть <ESC>?v
7 - должно быть <ESC>?w
8 - должно быть <ESC>?x
9 - должно быть <ESC>?y
. - должно быть <ESC>?n
<Enter> - <ESC>?M
---------- Post added at 19:25 ---------- Previous post was at 19:19 ----------
Сейчас попью чаю и сформулирую как мне видится набор возможностей VT52 на все случаи жизни :)
Первая порция.
Варианты/идеи будут в следующем посте.
Скрытый текст
Код:Итак, пойдем по порядку.
Для начала за основу берем CM7209 - он у меня сейчас подключен к 11/83 и в случае чего
легко проверить. Кроме того из тех, что мне попадались, он самый близкий по поведению
к родному VT52.
1. Терминал должен иметь следующие индикаторы (можно менять в зависимости от профиля
или как минимум):
POWER ON - ;)
LINE - Терминал подключен (шлет в порт, принимает из порта). Возможность
переключения в offline - терминал шлет сам себе.
HOLD SCREEN - Терминал в режиме HOLD SCREEN. Никакой связи с простановкой вывода.
AUTO COPY - Включен режим автокопирования на принтер
AALT KEY - Включен режим ALT Keypad
2. Терминал должен уметь посылать BREAK в линию. Варианты: кортокий, до отключения.
На родном VT52 не помню как, на CM7209 к примеру <BREAK> включает отправку,
<SHIFT>+<BREAK> выключает. VT220 у меня просто шлет разовый.
3. Звук на символ <BEL> длинный (запишу звук), регулируется громкость. Кроме того
при печати любого символа в 72 колонке также раздается звук.
4. Нажатие клавиш вызывает клик, писк короткий, громкость регулируется вместе с громкостью
<BEL>.
5. При достижении курсором правой границы экрана перевода строки не происходит. Новый печатный символ печатается поверх старого.
6. Привключении терминал шлет короткий BREAK в линию (возможность отключения - иногда наоборот это мешает), при выключении не обязательно.
7. При получении BREAK терминал печатает символ закраски знакоместа (точки в шахматном порядке, два соседних символа сливаются). То есть пока принимаются символы с ошибкой FRAME ERROR, терминал рисует эти символы. На практике это выглядит как печать строки (целой или частичной) из этих символов при отключении машины к кторой он подцеплен (в том числе если прицепить к PC).
Управление экраном:
<BEL> - собственно он
<BS> - Курсор влево. Если в начале строки - ничего не делать.
<HT> - Установка курсора в ближайшую позицию вперед:
8, 16, 24, ..., 72, 73, 74. 75, 76, 77, 78, 79 (символы по дороге не затираются)
<CR> - Курсов в начало строки.
<LF> - Курсор на строку вниз со скроллингом если в последней строке.
Остальные CTRL-коды никак не отображаются на экране и не выполняют никаких действий.
8 бит отрезается, символ <DEL> ничего не выводит (пока говорим только о профиле CM7209).
Отдельного упоминания стоит <FF> - аналогично - ничего не выводит - это его стандартное поведение на терминале.
<ESC> = - Переключиться в ALT Keypad
<ECS> > - Переключиться в NUM Keypad
<ESC> A - Курсор вверх на строку. Если уже в верхней - ничего не делать.
<ESC> B - Курсор вниз на строку. Если уже в нижней - ничего не делать.
<ESC> C - Курсор вправо. Если в последней колонке - ничего не делать.
<ESC> D - Курсор влево. Если в первой колонке - ничего не делать.
<ESC> F - Включить графику
<ESC> G - Отключить графику
<ESC> H - Курсов в начало экрана
<ESC> I - Курсор на строку вверх. Если в первой - сдвинуть экран вниз.
<ESC> J - Очистить экран от курсора до конца
<ESC> K - Очистка от курсора до конца строки
<ESC> Z - Запрос идентификации терминала
<ESX> Y - Позиционирование курсора. Варианты настроек (не уверен что нужны):
- запредельные координаты игнорить / позиционировать в конец
- позиционировать на первую координату сразу по получении
символа / после получения всей последовательности
- непечатные (CTRL, DEL) символы игнорировать полностью всегда
(в последовательности их не учитывать)
<ESC> [ - Включение режима HOLD SCREEN
<ESC> \ - Отключение.
<ESC> ] - Включение COPY SCREEN - экран отправляется на принтер/лог, в линию шлется <DC3>,
из линии буферизуется и на экран не попадает до окончания, по окончании шлется <DC1>
и включается вывод.
<ESC> ^ - Включить автокопирование на принтер (в лог)
<ESC> - - Отключить (позже почитаю как точно эта фича работает)
Ответ терминала на INQUIRE:
<ESC>/K - VT52 без принтера
<ESC>/L - VT52 с принтером
[свернуть]
---------- Post added at 20:52 ---------- Previous post was at 20:38 ----------
Теперь собственно идеи.
Первое что напрашивается - профили настроек (чтобы одним движением руки выбрать нужный терминал)
Переключаемые опции:
- ответ на INQUIRE стандартные VT52 или <ESC>/Z (VT100 в режиме VT52) - 15ИЭ вроде именно так отвечает
- писк в 72 колонке (15ИЭ)
- автоперевод в конце строки (15ИЭ)
- режим BLINK CTRL (15ИЭ) - CTRL символы не работают, а печатают мигающий символ который собственно CTRL+
- FF стирает экран (УКНЦ)
- программирование F-клавиш (УКНЦ)
- цвет
- тип курсора (в том числе моргающий, горящий, с инверсным символом)
- DEL - печатный символ (прямоугольник, не сливается)
- разные наборы граф режима или отсутствие такового
- поддержка HOLD SCREEN
- charset ENG, ENG+RUS, 8bit, <SI>/<SO>
- разные наборы шрифтов
- отработка <ESC>[?2l как NOP и снятие HOLD SCREEN (который включится по <ESC>[) если был выключен до этого
- Keypad Enter - <ESC>H в NUM режиме
- регулировка яркости как на терминале ;)
- поддержка передачи файлов (KERMIT, TRANSF)
Возможность всяких фич - например строка статуса как в 15ИЭ с возможностью выставления опций в ней как в родном, с отключаемыми часами в ней итд.
Экранные клавиатуры в стилях разных терминалов, оформление в стиле терминала ;)
Будут еще идеи - сюда же допишу, пока отвлекли...
У меня это работает так:
Скрытый текст
Нужно открыть используемый файл конфигурации и в разделе [VT52.ini] найти следующие строки:
И установить интересующий режим.Код:InitialStateOf[Bold] = 0
SaveChangesFor[Bold] = 0
Сейчас добавлю.
Такой курсор будет, если его настройки вообще не задавать в cfg файлах ( но в комплекте поставки они задаются во всех файлах *.cfg ). Для отмены - найти и удалить в используемом файле конфигурации следующую строку ( в разделе [VT52.ini] ):
Код:CURSOR_Y_START_% = 85
Можно разрешить псевдографику для отдельных имён шрифтов и использовать специальную матрицу перестановок для каждого такого имени.
Матрица 15ИЭ идентична матрице КСМ ( точнее наоборот - разработчики КСМ использовали коды ПЗУ знакогенератора 15ИЭ ). Однако, 15ИЭ не поддерживает псевдографику, поэтому соответствующие ячейки ПЗУ используются только в КСМ.
NumpadSwapping имеет смысл только при имитации клавиатуры 15ИЭ, поэтому установка Use_NumLock_as_PF1 = 1 в последующих версиях терминала будет этот параметр блокировать.
Наборы символов для псевдографики.
Наиболее интересен символ, соответствующий 'a' - закрашенный квадратик. Он используется в EDT, K52 и RTMON.
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_19.11.12_22-06.
Изменения:
1. В комплект поставки добавлен каталог HX Sources с исходниками драйвера HX.SYS и начального загрузчика HX.
2. В мультиплексор HX добавлена поддержка передачи сжатых потоков. Приём сжатых потоков добавлен в основной и первичный драйверы HX.
3. В файлы конфигурации HX_IP.cfg и HX_COM.cfg добавлена кнопка [Use HX Compression], позволяющая управлять использованием сжатия при работе мультиплексора HX.
Время загрузки RT-11 на скорости 9600 BPS в зависимости от использвания сжатия:
4. Теперь объект ODT_Loader после отправки символов <LF> или '/' переходит в состояние ожидания до приёма пробела или промпта.Код:Сжатие HX Нет Есть
Система
RT-11 V05.04 70 сек. 60 сек.
RT-11 V05.07 88 сек. 70 сек.
5. На полосу статуса внутреннего окна терминала добавлен индикатор [NUM/ALT] ( [ /ДКЛ] ), отображающий состояние дополнительной клавиатуры и позволяющий изменять его при помощи клика мыши.
Сейчас мы его...
Я понял что нужно сделать - нужно снести все и с нуля настроит :)
---------- Post added at 23:01 ---------- Previous post was at 22:42 ----------
Keypad работает. Видимо или в конфиге чего-то накрутил или (только что подумал) - может по привычке '=' пытался с shiftом нажать :)
Хотя нет - обнаружил-то сначала что из K52 выйти не могу. В отличие от EDT там нет командного режима в который можно выйти по CTRL/Z.
За что индикатор EXTом обозван? Есть же стандартное название (которое вошло также в стандарт ANSI) - Alternate keypad, Numeric keypad. :)
Кстати, как бы ему шрифтик побольше сделать - пытался найти, но больше чем он предлагает по умолчанию не получилось. На больших экранах как-то неуютно :)
С HX грузится устойчиво.
О, нашел - само меняется если аккуратно растянуть...Цитата:
Сообщение от form
Вот кстати пример где этот символ `a' используется.
Навскидку перебрал несколько программ DECовских - везде только он и используется для VT52.
Т.е. надо не EXT, а ALT ..
Для разнообразия - исправим эту проблему при помощи API локализации.
Нужно открыть текстовый файл Terminal_module.lng, найти там следующие строки:
и добавить вариант перевода для английского языка:Код:DEF:"EXT"
RUS:"ДКЛ"
Код:DEF:"EXT"
ENG:"ALT"
RUS:"ДКЛ"
---------- Post added at 19:45 ---------- Previous post was at 19:35 ----------
Нажимая <Gold>, <Буквенная клавиша> ?
---------- Post added at 19:47 ---------- Previous post was at 19:45 ----------
На скрине - в VT52.exe загружен файл конфигурации COM.cfg ( для загрузки с HX нужен HX_COM.cfg ).
<GOLD>7
Сейчас проблемы нет - видимо где-то чего-то в конфиги испортил :)
---------- Post added at 23:52 ---------- Previous post was at 23:49 ----------
С HX уже наигрался - это обычный VT52.
Я уже и RTEM запустил с него - правда у меня там SET SL ON стоит в автомате - пришлось со второго терминала спасать :)
Хитрость в том, что если редактируется русский текст, то ввести команду <Gold>, <Буквенная клавиша> можно только переключившись на латинский регистр.
В терминале есть специльный режим Gold Mode, который после нажатия <GOLD> отключает русскую раскладку для следующей клавиши. Но этот режим пока работает только для клавиши <GOLD>, выдающей " \033f ".
С учетом того, что я использую родные непеределанные системы, даже при всем желании русский текст редактировать не получится :)
Точнее сама система как многотерминальная позволяет вводить-выводить 8bit, но это нужно флаги терминала выставлять. А KED/K52 все-равно с 8bit не работает. Там я смотрел в сорцах - есть зарубки в коментариях, но времени не было поковырять.
---------- Post added 20.11.2012 at 00:04 ---------- Previous post was 19.11.2012 at 23:58 ----------
Вобщем сейчас все отлично. HOLD вот только напрягает путанницей ибо все свалено в кучу до приведения собственно HOLD в неработоспособность :)
Тогда проблем быть не должно.
Для контроля обмена управляющими кодами можно добавить в используемый файл конфигурации консоль, на которую будут копироваться байты, передаваемые из порта в терминал и из терминала в порт:
Код:[objects]
Con = Ядро:Console
[links]
ComPort > Con
VT52 > Con
Режим HOLD не предназначен для активации кнопкой. Он активируется програмно. С самим HOLD как таковым собственно проблем нет (по крайней мере на первый взгляд).
Зато кнопка, эмулирующая <SCROLL> херачит в линию то <DC3> то <DC1> тогда как эта клавиша на терминале ASCII кода не имеет ни постоянного ни сменного и ничего в порт не шлет сама по себе. Лишь должна проинструктировать терминал послать <DC1> если это требуется (вывод остановлен), а <DC3> ни сама клавиша не посылает, ни терминал к тому этой клавишей никогда не побуждается (у нас все-таки VT52, а не VT220).
Еще прикол. Запускаю прогу которая показывает коды нажатых клавиш, жму CTRL/S, прога честно рисует <023> (ну терминал конечно радостно мне меняет цвет HOLDу, к этому уже кажется привыкли), далее совсем смешно: нажимаю любую клавишу - скажем <CR>, он мне показывает, что нажаты <CR><DC1> тогда как никакого CTRL/Q я не нажимал. На лицо косяк который может заставить программы криво работать.
Все-таки по-моему не очень хорошая идея предполагать как ведет себя софт на основании своих правил :)
---------- Post added at 00:31 ---------- Previous post was at 00:22 ----------
Дописал еще идейку в список :)
А у нас ещё и кнопкой!
Если эту кнопку не трогать - никто не пострадает, а если трогать - можно останавливать и продолжать вывод любого листинга при помощи кликов мыши, что бывает весьма удобно.
Эта кнопка эмулирует <SCROLL> только когда вывод на экран остановлен в режиме HOLD. Всё остальное время эта кнопка переключает режимы Xoff/Xon ( что эквивалентно последовательным нажатиям <Cltrl/S><Ctrl/Q> ).
Это косяк, исправленный вариант терминала VT52_19.11.12_22-06.
Так тогда зачем мне этот режим? - один раз упереться в конец экрана и все на этом? :)
Э-э, я не про кнопку которая на экране - я про кнопку, эмулирующую <SCROLL>/<ROLL>.
Что не эквивалентно останову/продолжению так как с точки зрения софта эти символы могут быть обыкновенными рядовыми ASCII кодами и попытка вмешательства (пример показал - жму одно, нажимается другое) может поломать всю картину :)
---------- Post added at 01:22 ---------- Previous post was at 01:17 ----------
Во.
Теперь лишний CTRL/Q не выдается.
Осталась мелочь - отвязать кнопку ScrollLock от переключения режима и приделаеть ей родной функционал, да еще опционально убрать реакцию на CTRL/S и CTRL/Q вообще чтобы с толку не сбивали :)
Кстати ScrollLock параллельно работает по своему родному функционалу - по крайней мере лампочку переключает.
---------- Post added at 01:38 ---------- Previous post was at 01:22 ----------
Я тут кстати подумал - можно соединить HX и RTEM монитор и получить стопроцентно безконфликтную систему :)
При включённом режиме KeyboardControlling = 1 ( в файле Terminal.ini ) - лампочка [Scroll Lock] индицирует состояние режима Xoff/Xon ( горит - Xoff, не горит - Xon ).
Если KeyboardControlling = 0 - терминал не может имитировать нажатия на <Scroll Lock> для синхронизации режима горения лампочки с режимом Xoff/Xon, поэтому в таком случае лампочка просто переключается при каждом нажатии на клавишу <Scroll Lock> без како-либо гарантированной системы.
Добавлю такую возможность в следующем релизе.
Что значит "соединить" ?
Я про RTEM ничего не знаю.
У меня и стоит 0, а переключает ее система видимо :)
RTEM монитор - обычный RT-11, только собирается с опцией RTE$M=1 и файлом определений критических точек входа. При этом BSTRAP при загрузке патчит систему так, что вместо обращения к физическому железу в разных местах система вызывает соответствующие подпрограммы которые эмулируют нужный функционал (например переложив его на операционку внутри которой мы запускаем RT-11).
Посмотреть как это работает можно на CTAKAHе - команда "RTE /VS" загрузит RT-11 внутри RSX.
Ну а в данном случае, можно почти все подпрограммы заставить делать то, что они обычно и делали, а к примеру терминальные грамотно разделить одно от другого.
Хотя еще правильнее будет просто добавить такой функционал в сорцы системы (тем же способом как RTEM - заставить BSTRAP пропатчить) :)