PDA

Просмотр полной версии : Эмулятор терминала типа VT52



Страницы : 1 [2] 3 4 5

Titus
02.01.2013, 04:03
Что-то с хуками все же не чисто.

Все работает, но, когда переключаюсь с эмуляторного окна на окно консоли (которое у меня информационно-отладочное), все жутко начинает тормозить. Даже если в обработчике хука стоит просто переход по цепочке на следующий хук. Убираю хук - все работает быстро.
Пока что загадка.

Patron
02.01.2013, 12:32
все жутко начинает тормозитьЭто проблема реализации. Может быть связано с тем, что сообщения об утрате фокуса прежним окном и получении фокуса новым окном приходят в эти окна в произвольной последовательности относительно друг друга.

Titus
02.01.2013, 13:00
Это проблема реализации. Может быть связано с тем, что сообщения об утрате фокуса прежним окном и получении фокуса новым окном приходят в эти окна в произвольной последовательности относительно друг друга.

Всякое может быть, но вряд ли зависит от этого, т.к. хук абсолютно пустой и ничего не делает. Просто передает дальше - и все равно тормозит.

Patron
02.01.2013, 13:19
все равно тормозит.Чудес не бывает - комп тормозит тогда, когда что-то делает. Можно вставить в хук отладочную печать на экран консоли - сообщения должны появляться только при нажатиях на клавиши.

Titus
02.01.2013, 13:37
Чудес не бывает - комп тормозит тогда, когда что-то делает. Можно вставить в хук отладочную печать на экран консоли - сообщения должны появляться только при нажатиях на клавиши.

Мне все же кажется, что это накладки из-за того, что хук не в длл. Попробую выяснить.

Patron
02.01.2013, 14:05
Мне все же кажется, что это накладки из-за того, что хук не в длл. Попробую выяснить.Быть такого не может - между EXE и DLL нет практически ни какой разницы. Скорее - там где-то Sleep( x ) всех спать отправляет.

---------- Post added at 13:05 ---------- Previous post was at 12:47 ----------

Разборщик сообщений в хук-тесте выглядит так:


dword uTC = GetTickCount();

MSG msg;
for(;;)
{
if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
if( msg.message == WM_QUIT ) break;
}

Sleep(1);

if( GetTickCount() - uTC > 20000 ) { break; }
};


Строчка Sleep(1); применена для того, чтобы не отбирать у процессора слишком много времени.

Но при этом - разборщик не может обработать больше 1000 сообщений в секунду. Если сообщений будет приходить больше ( что в данном тесте полностью исключено ) - сообщения перестанут обрабатываться в реальном времени и всё начнёт дико тормозить.

Titus
02.01.2013, 14:17
Выяснил, где у меня подтормаживает.


if (PeekMessage(&msg, NULL, 0, 0, 0)) {
if (GetMessage(&msg, NULL, 0, 0)) { // Получить сообщение
TranslateMessage(&msg); // Если сообщение не QUIT,
DispatchMessage(&msg); // оттранслировать его окну
}
else SysExit(); // Иначе выйти закрыв все устройства
}


При отладке дебаггером, тормозят две строчки PeekMessage и GetMessage. Причем ТОЛЬКО если есть хук, даже пустой, установленный моей программой. Тормозят где-то по 2-3 секунды каждая, потом программа идет далее.

---------- Post added at 14:15 ---------- Previous post was at 14:09 ----------

Думаю, что дело в хуке.

В режиме, когда подвисают PeekMessage и т.д. (а это когда активно консольное окно эмулятора), функция хука, хотя и установлена, ПЕРЕСТАЕТ работать. Это определяется просто - печатаю в специальное окно сообщение 'Hool action', когда хук вызывается. Так вот в этом режиме оно перестает печататься. Это значит, что функция хука пропадает, и возможно на ней все и подвисает.

---------- Post added at 14:17 ---------- Previous post was at 14:15 ----------

Обработчик хука таков:


LRESULT CALLBACK KeyboardHook(int nCode, WPARAM wParam, LPARAM lParam)
{

printf("Hook action\n");

return CallNextHookEx(hhKeyboardHook, nCode, wParam, lParam);
}

Подвисает при активном консольном окне хоть с со строчкой printf, хоть без нее. И прекрасно работает при переключении на окно эмулятора.

Инициализация хука такая:



hhKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHook, hInst, 0); // Установить глобальный хук клавиатуры

Patron
02.01.2013, 14:19
if (PeekMessage(&msg, NULL, 0, 0, 0)) {
if (GetMessage(&msg, NULL, 0, 0)) { // Получить сообщение
TranslateMessage(&msg); // Если сообщение не QUIT,
DispatchMessage(&msg); // оттранслировать его окну
}
else SysExit(); // Иначе выйти закрыв все устройства
}
То же самое можно сделать проще:


if ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
{
if ( msg.message != WM_QUIT )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
SysExit();
}
}

Titus
02.01.2013, 14:24
То же самое можно сделать проще
Это не проще, и сути проблемы не меняет)

Patron
02.01.2013, 14:26
Я ни разу не пользовался отладчиком и компилю всегда сразу в Release, поэтому (возможно) с описанными проблемами ни разу не столкнулся.

---------- Post added at 13:26 ---------- Previous post was at 13:24 ----------


Это не прощеПроще ровно в 2 раза ( сообщение извлекается из очереди за один вызов, а не за два ).

Titus
02.01.2013, 14:29
Проще ровно в 2 раза ( сообщение извлекается из очереди за один вызов, а не за два ).
Ну не в этом суть. И так, и так будет тормозить.

Но тормозит не только в отладчике, тормозит и не в отладчике, если мое информационное окно консоли активно. Тормозит на вышеописанных местах.

Patron
02.01.2013, 14:33
тормозит и не в отладчике, если мое информационное окно консоли активно. Тормозит на вышеописанных местах.Это точно какая-то проблема реализации.
А если отключить хук в коде, но запускать перед эмулятором хук-тест - тогда какие симптомы ?

Titus
02.01.2013, 14:39
Это точно какая-то проблема реализации.
А если отключить хук в коде, но запускать перед эмулятором хук-тест - тогда какие симптомы ?
Тогда все работает идеально.
Однако, вся инициализация и обработчик хука в эмуляторе - предельно просты и приведены выше.

Patron
02.01.2013, 14:47
Тогда все работает идеально.А если запустить хук-тест после запуска эмулятора, а потом переключиться в эмулятор ?

Можно сделать два захода - когда эмулятор оставлен в окне эмуляции, а после запуска хук-теста переключается в окно консоли, и наоборот - оставлен в окне консоли, а потом переключается в окно эмуляции.

Titus
02.01.2013, 14:48
А если запустить хук-тест после запуска эмулятора, а потом переключиться в эмулятор ?

Можно сделать два захода - когда эмулятор оставлен в окне эмуляции, а после запуска хук-теста переключается в окно консоли, и наоборот - оставлен в окне консоли, а потом переключается в окно эмуляции.

Все работает, хоть до, хоть после. Пробовал.

Patron
02.01.2013, 14:57
Можно сделать так, чтобы окно эмуляции устанавливало хук только при получении фокуса, а при потере фокуса - убирало хук..

Но лучше - сделать в эмуляторе ещё одно пустое окно, переключение в которое происходило бы без тормозов - и добавлять туда код реализации консоли, пока тормоза не проявятся.

Titus
02.01.2013, 16:09
Хочу для эксперимента сделать в библиотеке.

Есть пример пустой библиотеки? А то VisualC по умолчанию пихает туда какой-то фигни, из-за чего размер 160кб. Причем, фиг отключишь в настройках линкера. Не получилось пока что.

Patron
02.01.2013, 16:39
Есть пример пустой библиотеки?В приложении - статически собранная DLL ( с проектом ) (http://zx.pk.ru/attachment.php?attachmentid=39085), которая при загрузке устанавливает хук и начинает писать лог в файл GlobalHook.log, а при выгрузке - убирает хук и закрывает лог.

Хук будет работать только тогда, когда загрузившая эту DLL программа обрабатывает сообщения.

Так в теории. На практике мне эту DLL грузить нечем, а писать в отдельном проекте ещё и специальный загрузчик - лень.

...

Titus
02.01.2013, 16:47
Эм... а 86кб почему?)

Patron
02.01.2013, 16:52
Эм... а 86кб почему?)Сборка статическая - код реализации всех использованных в исходнике DLL вызовов прилинкован к "телу" DLL.

Titus
02.01.2013, 16:58
Фух, довел хотя бы до 37Кб)

---------- Post added at 16:53 ---------- Previous post was at 16:52 ----------


Сборка статическая - код реализации всех использованных в коде вызовов прилинкован к "телу" DLL.

Слишком много прилинковывается. Разве оно ВСЕ надо? Или это просто стандартный набор?

---------- Post added at 16:54 ---------- Previous post was at 16:53 ----------

Вот ЭТО нужно все?


kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

---------- Post added at 16:58 ---------- Previous post was at 16:54 ----------


Хук будет работать только тогда, когда загрузившая эту DLL программа обрабатывает сообщения.
Почему?

Patron
02.01.2013, 17:15
Почему?Без понятия.

Мне ещё ни разу не удалось заставить работать хук в такой программе, которая не обрабатывает сообщения, или в то время, когда программа почему-то перестаёт обрабатывать сообщения.

---------- Post added at 16:15 ---------- Previous post was at 16:14 ----------


Вот ЭТО нужно все?Прилинковывается только тот код, который реально вызывается в DLL.

Titus
02.01.2013, 17:22
Прилинковывается только тот код, который реально вызывается в DLL.
Прилинковывается та библиотека из этого списка, функции которой используются, остальные нет? Возможно в твоем проекте и так.

А когда я сделал голый проект библиотеки в Вижуал Си, там все было вроде то же самое, но размер итогового файла был 160кб, а у тебя 80кб. Правда, оптимизациями я его уже довел до 37кб, что вообще приемлимо.

Patron
02.01.2013, 17:25
оптимизациями я его уже довел до 37кб, что вообще приемлимо.Размер файла роли не играет. Windows файлы в память не грузит, а запускает на выполнение "прямо с диска". Поэтому, если какой-то код есть в файле, но не используется - такой код так и останется на диске, ни разу не попав в память.

Titus
02.01.2013, 17:29
Размер файла роли не играет. Windows файлы в память не грузит, а запускает на выполнение "прямо с диска". Поэтому, если какой-то код есть в файле, но не используется - такой код так и останется на диске, ни разу не попав в память.
Мне кажется, ты ошибаешься)

Да и размер либы мне важен в комплекте с эмулятором.

Patron
02.01.2013, 17:34
Размер важен лишь в смысле размера архива. При запуске файла - Windows просто помечает его как специальный файл подкачки, считывая данные оттуда только при промахе системы виртуальной памяти.

Titus
02.01.2013, 17:54
При запуске файла - Windows просто помечает его как специальный файл подкачки, считывая данные оттуда только при промахе системы виртуальной памяти.
Ужас) В какое время мы живем)

Patron
02.01.2013, 18:09
Ужас) В какое время мы живем)При запуске со съёмных носителей и сетевых приводов - файл EXE считывается целиком и не лочится в качестве файла подкачки.

Поэтому, чтобы после запуска на выполнение гибридных файлов DskExe ( которые я научился делать ровно год назад ) их можно было не только читать, но и писать - надо научиться устанавливать из эмулятора виртуальный файл-сервер и перезапускать эмуляторную часть файла DskExe оттуда.

Titus
02.01.2013, 18:24
Какой формат должна иметь какая-либо вызываемая функция в библиотеке, кроме DllMain(), которая инициализирует либу? И в каком виде ее передавать в GetProcAddress() при открытии либы? Прям в таком же добуквенном?

Вот чего интересного нарыл про работу с хуками. Только пока не понял, как сегменту присвоить значение FIXED. И что оно значит вообще.


DLL можно и не загружать если в небольшой программке сделать все сегменты FIXED через def-файл, и там не нужно будет вызывать даже MakeProcInstance - всё будет и так работать.

Patron
02.01.2013, 18:32
как сегменту присвоить значение FIXEDСудя по тому, что хуки у VisualStudio прекрасно работают из EXE - там всё так и есть.


Какой формат должна иметь какая-либо вызываемая функция в библиотеке, кроме DllMain(), которая инициализирует либу? И в каком виде ее передавать в GetProcAddress() при открытии либы?А зачем это надо в данном случае, когда хук (по идее) должен устанавливаться вызовом LoadLibrary (http://msdn.microsoft.com/en-us/library/windows/desktop/ms684175(v=vs.85).aspx).

Создаётся файл лога после вызова LoadLibrary( "Hook_DLL.dll" ) ?

Titus
02.01.2013, 18:48
А зачем это надо в данном случае, когда хук (по идее) должен устанавливаться вызовом LoadLibrary (http://msdn.microsoft.com/en-us/library/windows/desktop/ms684175(v=vs.85).aspx).

Создаётся файл лога после вызова LoadLibrary ?

Затем, что эта библиотека мне только для примера, я на ее основе делаю свою. А мне нужна функция еще одна там.

Пробовал размещать в виде:


extern LRESULT CALLBACK FuncName()

Но она через :

hkprcSysMsg = (HOOKPROC)GetProcAddress(hinstDLL, "FuncName")

Не видится.

---------- Post added at 18:35 ---------- Previous post was at 18:34 ----------


Судя по тому, что хуки у VisualStudio прекрасно работают из EXE - там всё так и есть.
Судя по тому, что с работой в составе .exe есть глюки - не все так просто. Сделаю если в виде либы - станет понятнее.

---------- Post added at 18:48 ---------- Previous post was at 18:35 ----------


Пробовал размещать в виде:


extern LRESULT CALLBACK FuncName()

Причем ключевое слово __declspec(dllexport) тоже не помогает почему-то пока что.

Patron
02.01.2013, 19:01
Если добавить в код DLL такие строки:



#define EXPORT extern "C" __declspec(dllexport)

EXPORT int GetInt2()
{
return 2;
}


А в код программы такие:


typedef int (__cdecl* int_DllFun_void)( void );

HLIB hLib = LoadLibrary("XXX.dll");

int_DllFun_void GetInt2 = (int_DllFun_void) GetProcAddress( hLib, "GetInt2" );

int nInt = GetInt2();То в последней строчке функция GetInt2() должна вернуть число '2'.

Проблема экспорта функций из DLL в том, что для каждой разновидности экспортируемых функций нужно иметь правильный тип ( выделен синим ). Красным выделены тип возвращаемого значения и типы аргументов экспортируемой функции.

---------- Post added at 18:01 ---------- Previous post was at 17:55 ----------


Судя по тому, что с работой в составе .exe есть глюки - не все так просто.Хук и в EXE, и в DLL - работает абсолютно одинаково.

Titus
02.01.2013, 19:28
Проблема экспорта функций из DLL в том, что для каждой разновидности экспортируемых функций нужно иметь правильный тип ( выделен синим ). Красным выделены тип возвращаемого значения и типы аргументов экспортируемой функции.
Правильный тип нужен для использования функции. А у меня даже указатель на нее не получалось получить. Сейчас попробую с "C".

---------- Post added at 19:04 ---------- Previous post was at 19:01 ----------

Да, с extern "C" __declspec(dllexport) получилось,
а с __declspec(dllexport) не получалось.

---------- Post added at 19:13 ---------- Previous post was at 19:04 ----------


Хук и в EXE, и в DLL - работает абсолютно одинаково.
В общем, похоже, что все так и есть.

Попробовал подключить твою либу к своему эмулятору, при открытии ее (а следовательно и при инициализации еешного хука), все так же начинает глючить, как и при собственном хуке, который был в .exe.
Т.е. при активном окне эмулятора все окей, при активном окне консоли - тормоза и невызывание хука (в лог ничего не пишется).

Но тут я вспомнил твои слова о том, что при отсутствии опроса сообщений хук не работает. И таки да - в режиме консоли у меня сообщения, идущие эмулятору не опрашиваются. Т.е. они опрашиваются, но только когда выполняется какая-либо команда консоли. Значит собака зарылась здесь, и надо понять КАКИМ образом тормоза и глюки хуков зависят от невызывания разбора сообщений.

---------- Post added at 19:28 ---------- Previous post was at 19:13 ----------

Причем, хук, запущенный в другой программе (например тесте хуков) работает исправно.

Patron
02.01.2013, 20:08
хук, запущенный в другой программе (например тесте хуков) работает исправно.Там свой (работающий в этот момент) разборщик сообщений.

---------- Post added at 19:08 ---------- Previous post was at 19:04 ----------

Можно запускать хук в отдельном потоке со своим разборщиком сообщений - это самое простое решение, которое "уравнивает в правах" поток хука с хуком во внешнем процессе.

Titus
02.01.2013, 20:09
Там свой (работающий в этот момент) разборщик сообщений.

Но хук - вещь не относящаяся к конкретной программе, просто звено в цепочке обработки, никак (если исходить из доки) не завязанная с сообщениями конкретному окну.

Patron
02.01.2013, 20:17
Код потока хука может выглядеть так:


dword WINAPI HookThread( LPVOID pArg )
{
ghKeyboardHook = SetWindowsHookEx( WH_KEYBOARD_LL, KeyboardHook, ghInstance, 0);

MSG msg;
for(;;)
{
if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
if( msg.message == WM_QUIT ) break;
}

Sleep(1);
}

UnhookWindowsHookEx( ghKeyboardHook );

return 0;
}


А код его запуска в основной программе - так:


HANDLE hHookThread = CreateThread( NULL, 0, HookThread, NULL, 0, NULL );

---------- Post added at 19:17 ---------- Previous post was at 19:17 ----------


Но хук - вещь не относящаяся к конкретной программе, просто звено в цепочке обработки, никак (если исходить из доки) не завязанная с сообщениями конкретному окну.Судя по всему - доки по хукам безнадёжно устарели.

Titus
02.01.2013, 20:19
Немножко поэкспериментировал.

Все застревает на функции PeekMessage(), если она не вызвана вовремя.

Я думаю так: если процесс не отвечает на сообщения, то он считается зависшим, и хук, находящийся в экзешнике этого процесса отключается.

Если процесс снова начинает отвечать на сообщения, то хук восстанавливается, но с небольшой задержкой. Эта задержка внутри PeekMessage и подтормаживает систему.

Patron
02.01.2013, 20:21
Хотя, наверняка, потоку хука можно делать блокирующий вызов GetMessage вместо не блокирующего вызова PeekMessage. Есть смысл сначала сделать с PeekMessage и Sleep(1), а потом с GetMessage.

Titus
02.01.2013, 20:34
Судя по всему - доки по хукам безнадёжно устарели.
Как это устарели? Просто много чего недокументированно.

---------- Post added at 20:34 ---------- Previous post was at 20:23 ----------

Ура! Вот в таком виде прекрасно работает и не виснет:


UINT32 WINAPI HookThread(LPVOID pArg)
{
hhKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHook, hInst, 0);

MSG msg;

while (true)
{
GetMessage(&msg, NULL, 0, 0);
TranslateMessage(&msg);
DispatchMessage(&msg);

if( msg.message == WM_QUIT ) break;
}

UnhookWindowsHookEx( hhKeyboardHook );

return 0;
}

Вывод сделан - если поток не отвечает на сообщения, он считается зависшим, и его хук отключается. Хук, созданный другим потоком работает при этом прекрасно.

Как убить созданный поток, послав ему честный WM_QUIT?

Patron
02.01.2013, 20:53
Как убить созданный потокНадо вставить туда печать в файл и проверить, закрывается ли он сам при выходе из программы.

Titus
02.01.2013, 20:56
Надо вставить туда печать в файл и проверить, закрывается ли он сам при выходе из программы.

Все же желательно ему послать команду, только не помню как.

---------- Post added at 20:56 ---------- Previous post was at 20:55 ----------

Хотя, конечно, закрывается. Как и все открытые файлы, и много чего еще.

Patron
02.01.2013, 20:59
Все же желательно ему послать командуPostThreadMessage (http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms644946(v=vs.85).aspx)


Хотя, конечно, закрывается. Как и все открытые файлы, и много чего еще.Имелась в виду проверка ( при помощи печати в файл ), получают ли все потоки процесса WM_QUIT при выходе из программы.

Titus
02.01.2013, 21:16
PostThreadMessage (http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms644946(v=vs.85).aspx)

Имелась в виду проверка ( при помощи печати в файл ), получают ли все потоки процесса WM_QUIT при выходе из программы.

На сколько я знаю - да.

---------- Post added at 21:16 ---------- Previous post was at 21:01 ----------

Безобразие! Если послать WM_QUIT потоку слишком быстро, вскорости после создания, то это сообщение ему не доходит, и он не закрывается.
Стало быть надо еще проверять, а не создан ли уже поток успешно. Фиг проверишь. Надо вводить переменную флага внутри него.
А вообще, нафиг. Раз при закрытие программы, все потоки закрываются, ну и фиг с ним - закроется сам.

Patron
02.01.2013, 21:23
фиг с ним - закроется сам.Думаю, главное - чтобы в потоке был разборщик сообщений.

У меня разборщик есть только в потоке интерфейса, а остальные потоки сообщения не проверяют.
Возможно, как раз по этой причине эмулятор ДВК "застревает" в памяти примерно в 10% случаев.

Titus
02.01.2013, 21:25
Думаю, главное - чтобы в потоке был разборщик сообщений.

У меня разборщик есть только в потоке интерфейса, а остальные потоки сообщения не проверяют.
Возможно, как раз по этой причине эмулятор ДВК "застревает" в памяти примерно в 10% случаев.

Мне кажется, что когда процесс закрывается, он и все потоки должен свои прибивать. Как иначе?

Patron
02.01.2013, 21:38
Мне кажется, что когда процесс закрывается, он и все потоки должен свои прибивать. Как иначе?Главный поток выходит из WinMain, но программа остаётся в памяти. Надо будет сделать отладочную печать при выходе из каждого потока и проверить - завершаются ли они все в случаях "застревания".

Ведь выход из WinMain - это ещё не завершение процесса. В CRT есть код и перед вызовом WinMain, и после выхода из WinMain.

Titus
02.01.2013, 21:48
Главный поток выходит из WinMain, но программа остаётся в памяти. Надо будет сделать отладочную печать при выходе из каждого потока и проверить - завершаются ли они все в случаях "застревания".
Думаю, что это не просто, т.к. все файлы, которые созданы процессом, тоже закрываются, и может просто не успеть в него напечататься. А может и успеет, не знаю)

Patron
03.01.2013, 01:58
OutputDebugString в VisualStudio вроде держится "до последнего".Можно просто не выходить из WinMain, пока все потоки не "дадут добро".

Titus
04.01.2013, 00:46
Кстати, раз ты уж такой хороший виндовый системщик, может подскажешь решение такой проблемы.
Мне необходимо синхронизироваться с VBlank. Для этого я использую функцию lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKEND,NULL) - это из DirectGraphics. Все замечательно, только эта функция отбирает быстродействие, пока ждет вертикального гашения луча. Т.е. запустил, и все, поцесс ожидания берет на себя все быстродействия компьютера. Это совершенно не айс. Мне нужнен аналог этой функции, который не берет быстродействия на себя, а аналогичен Sleep(). Или же чтобы во время VBlank пришел какой-нить колбек и разбудил мой процесс.
Спрашивал на программистких форумах, внятного ответа не увидал.

---------- Post added at 00:46 ---------- Previous post was at 00:42 ----------

И еще, какие есть возможности в винде для засыпания процесса на некоторое время кроме Sleep? Нет ли засыпания на фиксированное время с точностью до микросекунд? Потому что в слип задержка топорная. Где-то я читал, что на Sleep влияет timeBeginPeriod(), но работает не у всех.

Titus
04.01.2013, 03:45
Вычитал, что в интерфейсе IDirect3DDevice9Ex вроде бы есть функция WaitForVBlank, которая действительно умеет засыпать до начала кадра. Но, судя по докам:


DirectX 9.0L:

Предоставляет дополнительные интерфейсы IDirect3D9Ex и IDirect3DDevice9Ex с функциональностью, доступной лишь через LDDM-драйверы ОС Windows Vista.

Т.е. этот дополнительный интерфейс работает начиная с Висты? Проверить не могу, т.к. у меня нет вообще SDK 9, есть только 8, потому что Visual Studio 2003.

Patron
04.01.2013, 18:16
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_04.01.13_18-24.

Изменения:

1. Теперь подключенные образы можно отключать от приводов эмулятора, используя Ctrl / Left-Click на копке выбора образов.

2. В файл Terminal.ini добавлена константа


Solid_177 = 1
задающая, отображать ( при Solid_177 = 1 ) или нет ( при Solid_177 = 0 ) коды 0177 и 0377 в виде засвеченных знакомест. Значение по умолчанию 1.

3. В файл Terminal.ini добавлена константа


SmartHold = 1
включающая ( при SmartHold = 1 ) или выключающая ( при SmartHold = 0 ) автоматический сброс режима HOLD в том случае, если следующими после включающих режим HOLD кодов "\033[" двумя выведенными на терминал символами будут '?' и любая цифра. Значение по умолчанию 1.

BYTEMAN
04.01.2013, 19:04
И еще, какие есть возможности в винде для засыпания процесса на некоторое время кроме Sleep?
WaitForSingleObject.... Тоже усыпляет...

Patron
19.01.2013, 00:13
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_18.01.13_19-15.

Изменения:

1. Мультиплексор и драйвер HX переделаны на новый протокол HX 2.1

2. Теперь загрузка производится с установкой даты сервера через специальный загрузчик Boot_RT-11_from_HX0.bin ( исходник в файле BotHX0.MAC ) при помощи объекта UKNCcomSender, для взаимодействия с которым на целевой компьютер предварительно загружается ODT-скрипт UKNC-style Loader.odt ( исходник в файле HXPre.MAC ).

3. Теперь по умолчанию использование сжатия в протоколе HX отключено.

Alex_K
20.01.2013, 12:24
Заметил небольшую ошибочку в эмуляторе VT52. Она есть как и в HX-сервере, так и в эмуляторе ДВК. При нажатии комбинации Ctrl+H передается код 0177, как и при Backspace, а ведь должно передаваться 010.

Patron
20.01.2013, 12:48
Она есть как и в HX-сервере, так и в эмуляторе ДВКНа данном этапе развития модульного API код всех DLL полностью включается в каждый exe-файл, поэтому разница между всеми этими exe-файлами ( pdp11.exe, VT52.exe, HX_Server.exe ) только в дате сборки ( выводится при запуске первой строкой на системную консоль ). Файлы с одинаковой датой сборки побитово идентичны и отличаются только именем.

hobot
21.01.2013, 06:55
Заметил небольшую ошибочку в эмуляторе VT52. Она есть как и в HX-сервере, так и в эмуляторе ДВК. При нажатии комбинации Ctrl+H передается код 0177, как и при Backspace, а ведь должно передаваться 010.
А непосредственно про ошибку? Насколько это критично ! Кстати говоря возможность
отключения образа очень пригодилась, спасибо ! )

---------- Post added at 06:55 ---------- Previous post was at 06:53 ----------

Ну я понимаю так, что НЫС по набору АР2 - УПР-H - Е не сработает на выход с сохранением? Так получается ? )

Alex_K
21.01.2013, 11:20
А непосредственно про ошибку? Насколько это критично !
........................
Ну я понимаю так, что НЫС по набору АР2 - УПР-H - Е не сработает на выход с сохранением? Так получается ? )
hobot, молодец, все абсолютно точно!!! Только я хотел выйти без сохранения по ESC-Ctrl+H-Q. Только потом посмотрел в файлах, что вроде можно нажать F10, но я сделал проще - погасил NumLock и нажал <5> на допклавиатуре, все-таки знание раскладки 15ИЭ-00-013 пригодилось.

shattered
28.01.2013, 22:29
Матрица 15ИЭ идентична матрице КСМ ( точнее наоборот - разработчики КСМ использовали коды ПЗУ знакогенератора 15ИЭ ). Однако, 15ИЭ не поддерживает псевдографику, поэтому соответствующие ячейки ПЗУ используются только в КСМ.


Похожа?

http://img-fotki.yandex.ru/get/5801/264743.1/0_773b4_b3d719a2_XL.jpg (http://fotki.yandex.ru/users/shattered/view/488372/)
«15ie: mock-up of display (http://fotki.yandex.ru/users/shattered/view/488372/)»

Это скрин сырого драйвера 15иэ в MESS. Знакогенератор вбивал с картинки в ТО.

Patron
28.01.2013, 22:44
Похожа?Один в один.

В приложении - матрица знакогенератора КСМ (http://zx.pk.ru/attachment.php?attachmentid=39549) в двоичном и текстовом виде.

...

shattered
28.01.2013, 22:53
Ага, ок. Дампа прошивки 15иэ, как я понимаю, пока ни у кого нет?

Patron
28.01.2013, 22:58
Ага, ок. Дампа прошивки 15иэ, как я понимаю, пока ни у кого нет?Удивительное дело.
Неужели его владельцам так сложно сдампить прошивку..

shattered
28.01.2013, 23:00
Для этого нужно аккуратно выпаять ее, как я понимаю

Patron
28.01.2013, 23:04
Для этого нужно аккуратно выпаять ее, как я понимаюТам ПЗУ на отдельной платке - можно, наверное, прочитать данные и тем способом, которым это делает процессор через интерфейсные линии платы ПЗУ.

hobot
30.01.2013, 10:08
offtop


Удивительное дело.
Неужели его владельцам так сложно сдампить прошивку..
Мне владелец-обладатель одной из модификаций ДВК написал такую вещь:
"Хобот не смейся! Но я боюсь ДВК включать, а вдруг не включится ! " )

shattered
30.01.2013, 21:03
hm

Glass TTY VT220 уже есть, можно задуматься о Glass TTY 15IE :-)

Patron
30.01.2013, 21:23
Glass TTY VT220 уже есть, можно задуматься о Glass TTY 15IEЭто точно!

Кто бы сделал нормальный точечный шрифт в стиле 15ИЕ..

Только нужно учитывать, что знакогенератор удваивает вправо каждую установленную точку матрицы, а самую левую точку матрицы - дважды повторяет после самой правой (так терминалы VT рисуют непрерывные линии, но в матрицах 15ИЕ и КСМ ни у одного знака нет ни одной точки в данной позиции).

...

При использовании шрифта Glass TTY VT220 в данном эмуляторе терминала - нужно раздвинуть окно пошире, нажать рядом с кнопкой [Шрифт] кнопку [Авто] и выбрать фиксированный размер шрифта 19:

http://emulator.pdp-11.org.ru/misc/VT220.png

shattered
30.01.2013, 21:51
Кстати, за этот шрифт можно говорить спасибо svofski (который его сделал из исходников). Кто нарисовал исходные шрифты, не знаю, но так вышло, что я их когда-то сохранил и выложил в интернеты.

Titus
30.01.2013, 23:19
Кстати, за этот шрифт можно говорить спасибо svofski (который его сделал из исходников). Кто нарисовал исходные шрифты, не знаю, но так вышло, что я их когда-то сохранил и выложил в интернеты.
Шрифт весьма красивый.

SKcorp.
31.01.2013, 01:17
offtop


Мне владелец-обладатель одной из модификаций ДВК написал такую вещь:
"Хобот не смейся! Но я боюсь ДВК включать, а вдруг не включится ! " )


А в туалет он ходить не боится?

Я еще понимаю бояться включать неизвестную машину без всякой документации, но ДВК...

shattered
01.02.2013, 22:48
Шрифт весьма красивый.

Кстати, http://olduse.net/ им пользуется.

Patron
13.02.2013, 23:57
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_13.02.13_23-42.

Изменения:

1. Мультиплексор и драйвер HX переделаны на новый протокол HX 2.2, полностью совместимый с HX 2.1

2. Теперь при нажатии Ctrl/H в терминале - генерится код 010, а не 0177

3. В файл Terminal.ini добавлены новые параметры, задающие коды, посылаемые клавишами [Backspace] и [Enter]:



ANSI_STR_FOR_KEY[Backspace] = "\177"
ANSI_STR_FOR_KEY[Enter] = "\015"

hobot
14.02.2013, 01:10
Patron, только что словил такой глюк, запустил эмулятор ДВК (файл EXE отсюда переименованный в PDP11.exe) и во время работы с диском словил в рабочую строку содержимое буфера обмена Виндоус?



HD (177720) disk driver v1.0b 2011

SL V08.00 [SW] Сторожевых С.В. 1988

RT-11SJ V05.01

.SE TT SCOPE, QUIET

Assignments:
Symbol Status Value
------ ------ -----
` auto < Dir/Fu/Vo/Bl
? auto < run
; :
^X auto < mac
^B auto < lin
^D auto < dess
^T auto < pascal
\ auto < nys
---------------------
Empty bytes: 235.

. ( ). :

?
KMON-F-Invalid command

.

.

. :

?KMON-F-Invalid command

.

.- ,

?KMON-F-Invalid command

.

..-,

?KMON-F-Invalid command

.

.run 780432001, <
L:NA?KMON-F-File not found DK:780432.SAV
M
.xmL:NAMespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />



0!UCL-E-Bad command or file name
.

. 044030653,

?KMON-F-Invalid command


.

./ 30301810255000605508


?KMON-F-Invalid command

.

./ 30101810500000000653,


?KMON-F-Invalid command

.

. 7707083893

?KMON-F-Invalid command


.


. :

?KMON-F-Invalid command

.

. 4230


?KMON-F-I
nvalid command

.

.


.

.

Как так вышло даже не знаю )
А что можно из Win-буфера в RT-11 что-то вставлять? )

Patron
14.02.2013, 01:52
во время работы с диском словил в рабочую строку содержимое буфера обмена ВиндоусПри нажатии Shift/Insert - содержимое буфера обмена вставляется в терминал.

Были нажатия на клавиатуру или просто во время простоя эмулятора взял и вставился буфер обмена ?

hobot
14.02.2013, 03:10
При нажатии Shift/Insert - содержимое буфера обмена вставляется в терминал.

Были нажатия на клавиатуру или просто во время простоя эмулятора взял и вставился буфер обмена ?

Конечно нет, я там команду какую-то вбивал ) Я про это сочетание не знал, вполне мог нажать, поскольку - это мой знаменитый INSERT - на ноут-буке который папутно-же и Num_Lock ))) Теперь понятно - вопрос снят ! ) Я мог промахнутся мимо Fn и нажать левый шифт ! )

form
01.03.2013, 16:15
Попробовал связаться с TSX через IP с помощью VTCOM и передать файлики. Использовался конфиг default2.cfg (http://zx.pk.ru/showpost.php?p=580970&postcount=41).

Для работы конечно непригодно из-за потерь символов, но файлы вполне терпимо передает... Попробовал эмулятор на максимальной скорости - потерь меньше и на true - потерь больше...

Patron
01.03.2013, 16:41
Для работы конечно непригодно из-за потерь символовВ какую сторону символы теряются по IP - на передачу из эмулятора, на приём в эмулятор или в обе стороны ?

По идее - на приём символы теряться не могут в принципе, потому что у эмулятора DL-порта не эмулируется оверран и все принятые по IP байты обязательно будут переданы программе RT-11, читающей байты из DL-порта.

Потеря на передачу (в теории) может происходить только на другой стороне IP-канала. Все отправляемые в DL-порт байты упаковываются в TCP-пакеты и отправляются адресату.

form
01.03.2013, 16:55
В какую сторону символы теряются по IP - на передачу из эмулятора, на приём в эмулятор или в обе стороны ?

По картинке видно - на прием в эмулятор.


По идее - на приём символы теряться не могут в принципе, потому что у эмулятора DL-порта не эмулируется оверран и все принятые по IP байты обязательно будут переданы программе RT-11, читающей байты из DL-порта.

Потеря на передачу (в теории) может происходить только на другой стороне IP-канала. Все отправляемые в DL-порт байты упаковываются в TCP-пакеты и отправляются адресату.

Передача через IP вообще головная боль. Когда соединял удаленный ДВК с E11 приходилось повозиться. Я думаю проблема в том, что символы при передаче по IP группируются в блоки и фигачат этими блоками. А вообще - фиг его знает.

Если просто телнетом подключиться - все работает отлично.

Огранизация такая:
.SH TE

Line Type Vector CSR Terminal Speed Active Line Name
---- ----- ---------- ------ -------- -------- ------ ------------
1 Oper. DL 060 177560 VT100 N/A 8N Yes TT0
2* Local DL 300 176500 VT100 N/A 8N Yes TT1
3 Local DL 310 176510 VT100 N/A 8N Yes TT2
4 Local DL 330 176530 VT100 N/A 8N No TT4
30 CL DL 320 176520 unknown N/A 8N CL0 CL unit 0

.

CL0 физически замкнут на TT2, телнетный сервер работает со стороны CL0 и подключает клиента к TT2.

---------- Post added at 19:54 ---------- Previous post was at 19:47 ----------

Только сейчас заметил - промахнулся мимо темы - это по идее в тему эмулятора. Ну да ладно...

По VT52 эмулятору - обнаружено, что если подключить его через COM порт как терминал к PDP-11, PUD очень плохо реагирует на стрелки, но прекрасно работает с односимвольными клавишами. С K52 кажется (но точно не помню) тоже проблемы были. Это на уродском USB<>2COM, раньше вроде не было проблем когда был обычный порт.

---------- Post added at 19:55 ---------- Previous post was at 19:54 ----------

Да, по VT220 (SecureCRT) все отлично - SL, KED...

Patron
01.03.2013, 17:14
Я думаю проблема в том, что символы при передаче по IP группируются в блоки и фигачат этими блоками.Но теряться они должны ещё до упаковки в TCP-пакеты на передающей стороне. Модульный API в принципе пока не умеет терять байты.

Можно добавить в конфиг ещё одну консоль и увидеть дамп того, что принимает IP_Adapter:



[objects]
IP_Dump = Ядро:Console

[links]
IP_Adapter > IP_Dump


[IP_Dump.ini]
TabTitle =
InitialStateOf[StatusBar] = 0
SaveChangesFor[StatusBar] = 0
InitialStateOf[ControlBar] = 0
SaveChangesFor[ControlBar] = 0
InitialStateOf[Log]=0
SaveChangesFor[Log]=0
DumpMode=1


Изменяя параметр DumpMode можно получать разные виды дампа (http://zx.pk.ru/showthread.php?p=562746#post562746).

Если на выходе IP-адаптера уже не будет части байтов - значит (скорее всего) именно так они и были упакованы в TCP-пакет на передающей стороне ( можно это там как-то проверить? ).

...


По VT52 эмулятору - обнаружено, что если подключить его через COM порт как терминал к PDP-11, PUD очень плохо реагирует на стрелки, но прекрасно работает с односимвольными клавишами. С K52 кажется (но точно не помню) тоже проблемы были. Это на уродском USB<>2COM, раньше вроде не было проблем когда был обычный порт.Здесь может играть роль настройка терминала


[VT52.ini]
InitialStateOf[SlowMultiByte] = 1При SlowMultiByte = 1 многосимвольные посылки передаются со скоростью 60 CPS, при SlowMultiByte = 0 многосимвольные посылки передаются без ограничения скорости.

form
01.03.2013, 17:25
Проверил - теряется в эмуляторе.
Точнее (это и раньше было понятно, забыл уточнить) - не в самом эмуляторе, а в RT-11.

form
01.03.2013, 17:32
Кстати можешь проверить от себя - оно у меня внаружу выставлено сейчас на 85.118.227.58. Система нужна FB (или другая с таймером), драйвер XL с параметрами второго терминального порта и VTCOM.REL (запускать можно как SAV если ни разу до этого не запускался как FRUN/SRUN).

Patron
01.03.2013, 17:55
Очень любопытно..

Как же RT-11 ухитряется терять байты в эмуляторе, причём в зависимости от скорости эмуляции, когда все эти байты уже приняты в эмулятор DL-порта и в принципе не могут потеряться ДО ЧТЕНИЯ из порта.

Если написать самодельную программку чтения/записи байтов через порт 176500 - она должна выводить всё без потерь.

form
01.03.2013, 17:57
в принципе не могут потеряться ДО ЧТЕНИЯ из порта.

Так из порта они системой читаются, но если буфер чтения забит - символ просто отбрасывается.

Patron
01.03.2013, 18:00
оно у меня внаружу выставлено сейчас на 85.118.227.58. Система нужна FB (или другая с таймером), драйвер XL с параметрами второго терминального порта и VTCOM.REL (запускать можно как SAV если ни разу до этого не запускался как FRUN/SRUN).Для проверки того, что все байты честно доходят из IP до эмулируемого DL-порта - нужно для начала написать простейший "эмулятор терминала" для RT-11, который будет просто копировать байты с клавиатуры в порт, а из порта - на экран.

form
01.03.2013, 18:02
Для проверки того, что все байты честно доходят из IP до эмулируемого DL-порта - нужно для начала написать простейший "эмулятор терминала" для RT-11, который будет просто копировать байты с клавиатуры в порт, а из порта - на экран.

VTCOM собственно это и делает, но использует систему и драйвер XL.
Сейчас напишу просто чистый терминал без участия системы.

Patron
01.03.2013, 18:05
Так из порта они системой читаются, но если буфер чтения забит - символ просто отбрасывается.Т.е. если программа не успевает забирать байты из буфера ввода RT-11 - он забъётся по прерываниям до отказа.

Тогда можно попробовать два решения:

1. Повысить скорость эмуляции - программа будет забирать байты быстрее.

2. Снизить эмулируемую скорость порта - эмулятор порта будет реже выставлять в порту готовность для отдачи очередного байта из принятого TCP-пакета.

Что если так сделать:


[TerminalPort2.ini]
BaseIO_Address = 0176500
BaseVectorsAddress = 0300
DL11W_TerminalPort_ComponentDisabled = 0
DL11W_LineClock_ComponentDisabled = 1
DL11W_LineClock_Hz = 50
DL11W_TerminalPort_BitsPerByte = 10
DL11W_TerminalPort_BaudRate = 4800
DL11W_TerminalPort_CPS_Limit = 0

form
01.03.2013, 18:16
Скорость не помогла.
Написал терминал который по опросу без прерываний передает взад-вперед - в нем ничего не теряется.

Patron
01.03.2013, 18:36
Скорость не помогла.Т.е. если поставить скорость эмуляции Max - байты всё равно теряются ?


Написал терминал который по опросу без прерываний передает взад-вперед - в нем ничего не теряется.Оно и понятно - эмулятор терять байты не может.

Но если прерывание ввода происходит каждый раз, когда порт выставляет готовность - байты (начиная с какой-то скорости процессора) обязательно должны теряться.

Нужно пропатчить дековские мониторы так, чтобы они снимали разрешение прерывания в порту ввода, если входной буфер заполнен. При работе через порты без квитирования это ничего не изменит - байты продолжат теряться, но при работе через порты с квитированием ( такие как в УКНЦ и эмуляторе ДВК ) - полегчает радикально.

form
01.03.2013, 18:40
Нужно пропатчить дековские мониторы так, чтобы они снимали разрешение прерывания в порту ввода, если входной буфер заполнен.

Это чревато проблемами особенно если монитор FB/XM.
Но в данном случае потери идут не от клавиатуры, а от драйвера XL.
XL по идее можно пропатчить, но лучше найти решение универсальное.
От живого DL11 к пример ничего не теряется.

---------- Post added at 21:40 ---------- Previous post was at 21:39 ----------

Еще возможны проблемы если не выдерживается нужное количество инструкций перед возникновением прерывания - DEC любит завязываться на аппаратные возможности :)

Patron
01.03.2013, 18:41
И ещё один момент - не могут ли как-то влиять приоритеты прерываний двух DL-портов.

Может, в эмуляторе ДВК есть какая-то проблема с приоритетами прерываний, которая проявляется при одновременной работе RT-11 по прерываниям сразу через два DL-порта..

form
01.03.2013, 18:42
И ещё один момент - не могут ли как-то влиять приоритеты прерываний двух DL-портов.

Может, в эмуляторе ДВК есть какая-то проблема с приоритетами прерываний, которая проявляется при одновременной работе RT-11 по прерываниям сразу через два DL-порта..

Черт его знает.

Patron
01.03.2013, 18:44
Еще возможны проблемы если не выдерживается нужное количество инструкций перед возникновением прерывания - DEC любит завязываться на аппаратные возможностиЭмулятор очень строго выравнивает прерывания ввода в виртуальном времени - они происходят в полном соответствии с установленной в конфиге скоростью порта и числом битов в посылке.

form
01.03.2013, 18:47
Эмулятор очень строго выравнивает прерывания ввода в виртуальном времени - они происходят в полном соответствии с установленной в конфиге скоростью порта и числом битов в посылке.

Время временем, а важно именно количество инструкций которое успеет выполнить процессор между готовностью и прерыванием. Как бы посчитать это дело из эмулятора?

Patron
01.03.2013, 18:48
Если при установке скорости эмуляции Max - передача по XL пойдёт без ошибок, а простое копирование терминального вывода из порта на экран - с ошибками - значит именно одновременная работа по прерываниям с двумя портами вызывает проблему.

form
01.03.2013, 18:50
Если при установке скорости эмуляции Max - передача по XL пойдёт без ошибок, а простое копирование терминального вывода из порта на экран - с ошибками - значит именно одновременная работа по прерываниям с двумя портами вызывает проблему.

Ставил Max в самых первых тестах - теряется меньше, но все-равно теряется. Подскажи для скорости что добавить в default.cfg чтобы второй порт соединить с COM2 - попробую на плохом порте физическое соединение (на нормальном все было отлично).

Patron
01.03.2013, 18:58
Время временем, а важно именно количество инструкций которое успеет выполнить процессор между готовностью и прерыванием. Как бы посчитать это дело из эмулятора?Здесь всё просто - индикация скорости эмуляции MIPS в самой левой позиции строки статуса - это точное число инструкций процессора, выполненных за последнюю секунду.

Если, например, там 5.000 - то это значит, что за последнюю секунду было выполнено 5'000'000 инструкций, т.е. по 5'000'000*10/9600 на каждое прерывание ввода.

Но это если работа идёт только с одним портом.

---------- Post added at 17:58 ---------- Previous post was at 17:53 ----------


что добавить в default.cfg чтобы второй порт соединить с COM2



[objects]
ComPort = Ядро:Terminal_ComPort_Adapter



[links]
;; TerminalPort2 <==> IP_Adapter
TerminalPort2 <==> ComPort


[ComPort.ini]
PortName = COM2
InitialStateOf[ShowPortUse]=0
SaveChangesFor[ShowPortUse]=0
InitialStateOf[StopReading]=0
SaveChangesFor[StopReading]=0
MinimalBreakTime_MKS = 3000

form
01.03.2013, 19:09
Мда, на хреновом USB порте как и ожидалось вообще все плохо :)
В том числе из других эмуляторов.
Оно и не удивительно - если в терминале набрать DIR в RT-11, пол экрана мгновенно заполняется выводом :)

---------- Post added at 22:09 ---------- Previous post was at 22:06 ----------

Сейчас в RSX перегружусь - посмотрю как там - там вывод по крайней мере плавно идет.

form
01.03.2013, 19:17
Хе.
При подключении к RSX через кривой порт все идеально.
Никаких потерь, скорость эмулятора выставлена в True.
Но в M+ символы дозируются терминальным драйвером.

form
01.03.2013, 19:19
В экранных программах все-таки есть потери.

Patron
01.03.2013, 19:22
В экранных программах все-таки есть потери.Если главная проблема при обычной работе по прерываниям "на два порта" - то всё, что нужно для теста такой проблемы - это многотерминальная версия монитора, я правильно понял ?

form
01.03.2013, 19:24
Если главная проблема при обычной работе по прерываниям "на два порта" - то всё, что нужно для теста такой проблемы - это многотерминальная версия монитора, я правильно понял ?

Можно проверить.
В многотерминальной системе XL выставляет многотерминальные хуки и работает через них. Насколько это будет отличаться - фиг знает.

Там еще в драйвере XL есть всякие параметры на тем размера буфера и когда XOM/XOFF слать - тоже можно посмотреть.

Patron
01.03.2013, 19:30
Если многотерминальная система не обязательна - значит в отднотерминальной системе драйвер XL эксклюзивно садится на второй порт и сам работает с ним по прерываниям.

Но зачем тогда FB, почему в SJ работать не будет ?

form
01.03.2013, 19:31
Если многотерминальная система не обязательна - значит в отднотерминальной системе драйвер XL эксклюзивно садится на второй порт и сам работает с ним по прерываниям.

Но зачем тогда FB, почему в SJ работать не будет ?

Будет если добавить поддержку таймера.

Patron
01.03.2013, 19:35
Будет если добавить поддержку таймера.И что надо делать, чтобы через XL посылать команды во второй порт и выводить оттуда ответ на экран ?

form
01.03.2013, 19:36
И что надо делать, чтобы через XL посылать команды во второй порт и выводить оттуда ответ на экран ?

Запустить VTCOM.
Кстати можно проверить еще где потери - в XL или в самом VTCOM (что вероятнее), но для этого надо уметь програмить XL. В device handlers manual в конце должно быть описание, посмотрю на досуге.

Patron
01.03.2013, 19:53
Запустить VTCOM.Не хочет SB-монитор VTCOM из дистрибутива v5.7 запускать


.VTCOM
?KMON-F-Mapped monitor required for SY:VTCOM.SAV

form
01.03.2013, 19:53
Не хочет SB-монитор VTCOM из дистрибутива v5.7 запускать


.VTCOM
?KMON-F-Mapped monitor required for SY:VTCOM.SAV

Дык писал же - нужно .REL использовать. SAV для XM/ZM.

Patron
01.03.2013, 20:12
Запустил VTCOM.REL под SB-монитором с поддержкой таймера - по IP всё работает:



HD (177720) disk driver v1.2 2012
SL V08.00 [SW] Сторожевых С.В. 1988
ПРИМЕНЯЙТЕ КОМАНДУ "SET MX INFORM"

RT-11SB (S) V05.07

.SET TT FORM

.SET EDIT K52

.SET EM ON

.SET SL ON

.DAY
Время Дата
20:02:25 01-Мар-2013, Пятница

.VTCOM.REL

Logon please:GUEST
Password:
Welcome to the system

.W
Uptime: 00:07:36
System use: Run=10%, I/O-wait=89%, Swap-wait=0%, Idle=0%
I/O Activity: User I/O=99%, Swapping I/O=0%

Job Line Pri State Size Connect CPU time Program Job name
--- ------ --- ------- ----- --------- -------- ------- ------------
1 1(0) 50 IN 62Kb 00:08:00 00:00:56 SYSMON ROOT
2 2(0) 50 TI 38Kb 00:08:00 00:00:01 KED ROOT
3* 3(0) 50 IN 37Kb 00:02:00 00:00:01 KMON GUEST
5 Det. 50 IN 62Kb 00:02:00 00:00:01 RTELNT TCP/IP stack
6 Det. 50 SL-Swap 30Kb 00:08:00 00:00:00 WINPRT Window print
7 Det. 50 SL-Lock 62Kb 00:08:00 00:00:04 TCPIP TCP/IP stack

.


---------- Post added at 19:12 ---------- Previous post was at 19:04 ----------

Но это было на скорости 1.000 MIPS

На скорости ДВК-1 5.3 МГц ( режим True ) получается так:



.VTCOM.REL

Logon please:GUEST
Password:
Welcome to the system

.W
Uptime: 00:14:40
System use: Run=10%, I/O-wait=89%, Swap-wait=0%, Idle=0%
I/O Activity: User I/O=99%, Swapping I/O=0%

Job --- ----- --------- -------- ------- ------------
1 1(
3* 3(0) 50 IN 37Kb 00:01:00 00:00:01 KMO 00:00:00 WINPRT Wi
ndow print
7 Det. 50 HI-Lock 62

.

form
01.03.2013, 20:16
У W тоже работает. DIR вот только ближе к концу начинает теряться.
Это 1000 и Max.

Patron
01.03.2013, 20:27
Проблема легко воспроизводится даже при локальном подключении на порт 127.0.0.1, поэтому исправить её не должно быть слишком трудно.

http://emulator.pdp-11.org.ru/misc/VTCOM.png

form
01.03.2013, 20:31
Кстати между делом, еще один полезный код псевдографики используется в K52 - символ "°" (соответствует f). Он его рисует на <FF> в тексте.

Patron
01.03.2013, 20:39
Кстати между делом, еще один полезный код псевдографики используется в K52 - символ "°" (соответствует f). Он его рисует на <FF> в тексте.Код должен одинаково отображаться во всех шрифтах Windows.

0xB0 вроде подходит.

---------- Post added at 19:39 ---------- Previous post was at 19:36 ----------


По VT52 эмулятору - обнаружено, что если подключить его через COM порт как терминал к PDP-11, PUD очень плохо реагирует на стрелки, но прекрасно работает с односимвольными клавишами. С K52 кажется (но точно не помню) тоже проблемы были. Это на уродском USB<>2COM, раньше вроде не было проблем когда был обычный порт.Здесь может играть роль настройка терминала


[VT52.ini]
InitialStateOf[SlowMultiByte] = 1При InitialStateOf[SlowMultiByte] = 1 многосимвольные посылки передаются со скоростью 60 CPS, при InitialStateOf[SlowMultiByte] = 0 многосимвольные посылки передаются без ограничения скорости.

Помогает, если изменить на InitialStateOf[SlowMultiByte] = 0 ?

form
01.03.2013, 20:48
И еще символ - "&#247;", соответствует j, рисуется на <VT>.

---------- Post added at 23:48 ---------- Previous post was at 23:43 ----------


Помогает, если изменить на InitialStateOf[SlowMultiByte] = 0 ?

Да, пашет.

Patron
02.03.2013, 21:59
И еще символ - "&#247;", соответствует j, рисуется на <VT>.Символ должен свопадать в шрифтах Fixedsys и Courier New.

Вот какие ещё не используются:


„ … † ‡ ? ‰ • ™ џ ¤ ¦ § © ® ±
„ … † ‡ ? ‰ • ™ џ ¤ ¦ § © ® ±


Можно сделать так:



if( bGraphicsMode )
{
if( ch == 'a' ) { ch = 0177; }
else
if( ch == 'f' ) { ch = 0xB0; }
else
if( ch == 'j' ) { ch = '‰'; }
else
if( ch == 'g' ) { ch = '±'; }
else
if( ch == 'i' ) { ch = '…'; }
else
if( ch == 0176 ) { ch = '§'; }
}

form
02.03.2013, 22:05
Символ должен свопадать в шрифтах Fixedsys и Courier New.

Вот какие ещё не используются:


„ … † ‡ ? ‰ • ™ џ ¤ ¦ § © ® ±
„ … † ‡ ? ‰ • ™ џ ¤ ¦ § © ® ±


Можно сделать так:



if( bGraphicsMode )
{
if( ch == 'a' ) { ch = 0177; }
else
if( ch == 'f' ) { ch = 0xB0; }
else
if( ch == 'j' ) { ch = '‰'; }
else
if( ch == 'g' ) { ch = '±'; }
else
if( ch == 'i' ) { ch = '…'; }
else
if( ch == 0176 ) { ch = '§'; }
}


На "a" и 177 должны быть разные символы, причем на 177 должен быть отключаемый - родная реакция VT52 - не выводить ничего, советская реакция - вывод НЕ полный закрашенный квадратик. На "a" закрас должен быть полный - со стыковкой соседних символов. На 176 CM7209 выводит нечто этакое... Где-то здесь приводил ворде фотку инструкции :)
Но вобщем он вроде специально нигде не используется.

---------- Post added at 01:05 ---------- Previous post was at 01:04 ----------

А вот рубль (¤) можно опционально вместо $ выводить - по советски :)

Patron
02.03.2013, 22:18
На "a" и 177 должны быть разные символы причем на 177 должен быть отключаемый - родная реакция VT52 - не выводить ничего, советская реакция - вывод НЕ полный закрашенный квадратик.Предыдущая строчка там как раз пропускает лишние "забои":



if( !nC_Solid_177 && ( (ch & 0177) == 0177 ) )
{
return;
}




На "a" закрас должен быть полный - со стыковкой соседних символов.Мониторы с псевдографикой VT-52 не выводят 0177, поэтому его размер там вполне можно настроить без зазора - хуже не станет. А иметь монитор, который одновременно выводит и 0177, и Solid_Rectangle, да ещё и по-разному - это слишком жирно.


А вот рубль (¤) можно опционально вместо $ выводить - по советскиДа, надо будет добавить такую настройку.

Patron
15.03.2013, 17:41
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_14.03.13_13-37.

Изменения:

1. Добавлена поддержка кодов псевдографики VT52 f:'°' ; j:'‰' ; g:'±' ; i:'…' и 0176:'§'.

2. Добавлен файл конфигурации OpenVMS.cfg для соединения с системой OpenVMS ( 178.49.9.102:2023 ).

3. Исправлен файл конфигурации CTAKAH.cfg ( 178.49.9.102:23 )

form
15.03.2013, 17:44
А таймаут пересоединения настроить можно?
А то делаешь "LO", он тутже снова начинает логиниться :)

Patron
15.03.2013, 17:55
А таймаут пересоединения настроить можно?
А то делаешь "LO", он тутже снова начинает логинитьсяЛюбой конфиг модульного API (пока?) статичен.

Поэтому, чтобы разорвать соединение - нужно или закрыть программу, или закрыть конфиг (программа запоминает конфиг при его открытии, поэтому если закрыть один конфиг и не открыть другой - после перезапуска программы последний использовавшийся конфиг снова будет открыт ).

form
15.03.2013, 17:56
Любой конфиг модульного API (пока?) статичен.

Поэтому, чтобы разорвать соединение - нужно или закрыть программу, или закрыть конфиг (программа запоминает конфиг при его открытии, поэтому если закрыть один конфиг и не открыть другой - после перезапуска программы последний использовавшийся конфиг снова будет открыт ).

Не совсем понял какое отношение написнное к вопросу имеет :)
Вопрос в том, чтобы когда соединение разорвалось (его разорвал сервер), оно пересоединялось не мгновенно, а через заданный (в конфиге) интервал.

Patron
15.03.2013, 18:01
Да, таймаут можно сделать.

Но какая разница - пересоединится IP-адаптер до закрытия конфига или нет.

Ведь при потере соединения хост тут же его "забывает", а если не закрыть конфиг сразу после LogOff - никакого таймаута не хватит.

form
15.03.2013, 18:04
Да, таймаут можно сделать.

Но какая разница - пересоединится IP-адаптер до закрытия конфига или нет..

Не понимаю о каком закрытии конфига идет речь.

А по поводу мгновенного пересоединения - если на той стороне не чистый телнет сервер, а телнет<>сериал эмулятора PDP-11, то мгновенное соединение может дать умершую линию которая уже не поднимется без закрытия программы и открытия ее снова.

Patron
15.03.2013, 18:17
Не понимаю о каком закрытии конфига идет речь.Конфиг закрывается при:
1. Завершении программы ( выбрать пункт меню: Файл->Выход или нажать мышью кнопку с крестиком в правом верхнем углу окна ).
2. Загрузке нового конфига ( пункт меню: Файл->Открыть ).
3. Выгрузке текущего конфига ( пункт меню: Файл->Закрыть ).


по поводу мгновенного пересоединения - если на той стороне не чистый телнет сервер, а телнет<>сериал эмулятора PDP-11, то мгновенное соединение может дать умершую линию которая уже не поднимется без закрытия программы и открытия ее снова.Сомневаюсь.

Когда тестировал VTCOMM - конфиг соединялся при загрузке, а логин происходил через довольно продолжительное время. Хост за это время успевал несколько раз разорвать соединение сам (из-за отсутствия активности) и конфиг каждый раз тут же пересоединялся , а после логофа конфиг пересоединялся ещё раз - и такой "сеанс" повторялся довольно много раз - ни разу проблем не возникло.

form
15.03.2013, 18:21
Конфиг закрывается при:
1. Завершении программы ( выбрать пункт меню: Файл->Выход или нажать мышью кнопку с крестиком в правом верхнем углу окна ).
2. Загрузке нового конфига ( пункт меню: Файл->Открыть ).
3. Выгрузке текущего конфига ( пункт меню: Файл->Закрыть ).

Это понятно. Не понятно откуда об этом речь пошла. Я ни о каких закрытиях и выходах не говорил.


Сомневаюсь.

Тут и сомневаться нечего - если переконнектиться к сериал линии в тот момент пока BYE в RSX эту самую линию отцепляет, можно так и остаться висеть на нерабочей линии. Многократно ловилось даже простым телнетным клиентом когда делался переконнект примерно через 5-6 секунд.


Когда тестировал VTCOMM

Вот тут как раз "сомневаюсь". Сомневаюсь, что ты пробовал потестировать VTCOM на модемной TELNET<>SERIAL линии :)

Patron
15.03.2013, 19:11
Я ни о каких закрытиях и выходах не говорил.В смысле - сделать логоф, а потом опять логон.


если переконнектиться к сериал линии в тот момент пока BYE в RSX эту самую линию отцепляет, можно так и остаться висеть на нерабочей линии.Т.е. переконнект не удастся и придётся перезапускать программу.

Ни разу с таким не сталкивался. Каждый раз после логофа опять успешно соединяет.

form
15.03.2013, 19:13
В смысле - сделать логоф, а потом опять логон.

Т.е. переконнект не удастся и придётся перезапускать программу.

Ни разу с таким не сталкивался. Каждый раз после логофа опять успешно соединяет.

А ты часто пробовал соединяться по tcp на эмулируемые модемные линии? :)

Patron
15.03.2013, 19:20
Можно добавить в IP-адаптер состояние Connect и параметр AutoReConnect, тогда на Connect можно будет повесить кнопку, котрая сама будет отжиматься при потере связи, а при нажатии - начинать её устанавливать. Состояние соединения можно отражать цветом надписи ( чтобы отличать наличие и отсутсвие соединения в процессе его установки ).

form
15.03.2013, 19:21
Можно добавить в IP-адаптер состояние Connect и параметр AutoReConnect, тогда на Connect можно будет повесить кнопку, котрая сама будет отжиматься при потере связи, а при нажатии - начинать её устанавливать. Состояние соединения можно отражать цветом надписи ( чтобы отличать наличие и отсуствие соединения в процессе его установки ).

Я думаю что одно другому не мешает - не так трудно поди добавить интервал для автоконнекта. И кнопка не повредит :)

Patron
15.03.2013, 19:53
не так трудно поди добавить интервал для автоконнекта.С каким максимальным значением в секундах ?

form
15.03.2013, 19:54
С каким максимальным значением в секундах ?

Думаю больше 120 смысла нет.

Patron
15.03.2013, 20:02
Так как секунда роли не играет - можно сделать параметр ReConnect с диапазоном 0..120, причём 0 будет отключать автоматический реконнект, а 1..120 - включать автоматический реконнект с задержкой 1..120 сек.

form
15.03.2013, 20:15
Так как секунда роли не играет - можно сделать параметр ReConnect с диапазоном 0..120, причём 0 будет отключать автоматический реконнект, а 1..120 - включать автоматический реконнект с задержкой 1..120 сек.

Да, самый оптимальный вариант.

Patron
19.03.2013, 23:46
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_19.03.13_23-13.

Изменения:

1. У объекта Terminal_IP_Adapter добавлен параметр ReConnect, задаваемый в секции объекта в файле конфигурации и задающий задержку в секундах перед повторным соединением. Допустимые значения 0..120. Значение по умолчанию 1. Значение 0 - запрещает повторное соединение.

2. В протокол HX добавлена поддержка команды протокола TU58 "Передать загрузчик для привода 0" ( "\04\010\00" ). После получения этой команды сервер HX отправит в порт первые 512 байтов c нулевого привода. Это позволяет использовать один и тот же аппаратный загрузчик для загрузки с HX и TU58.

form
19.03.2013, 23:56
Это позволяет использовать один и тот же аппаратный загрузчик для загрузки с HX и TU58.

Я бы не сказал, что это работает с родным загрузчиком KDJ11-B :)
Хотя на KDJ11-B никто не мешает просто свой загрузчик добавить.

---------- Post added at 02:56 ---------- Previous post was at 02:56 ----------

Впрочем не работает скорее всего из-за кривого порта...

Patron
20.03.2013, 00:02
Я бы не сказал, что это работает с родным загрузчиком KDJ11-BТеперь, получив "\04\010\00" ( брейк не обязателен, поэтому будет работать даже через IP ) - сервер HX вернёт первые 512 байтов нулевого привода.

Если должно работать, но не работает - можно повесить на входной порт консоль и посмотреть, какие байты идут из порта в сервер.

form
20.03.2013, 00:07
Теперь, получив "\04\010\00" ( брейк не обязателен, поэтому будет работать даже через IP ) - сервер HX вернёт первые 512 байтов нулевого привода.

Если должно работать, но не работает - можно повесить на входной порт консоль и посмотреть, какие байты идут из порта в сервер.

Как правильно повесить чтобы видно было?
Как минимум на кривом порте в сторону сервера летит "<BREAK>Trying DD0" :)

Patron
20.03.2013, 00:16
Как правильно повесить чтобы видно было?



[objects]
Input_Log = Ядро:Console


[links]
ComPort > Input_Log


[Input_Log.ini]
TabTitle =
InitialStateOf[StatusBar] = 0
SaveChangesFor[StatusBar] = 0
InitialStateOf[ControlBar] = 0
SaveChangesFor[ControlBar] = 0
InitialStateOf[Log]=1
SaveChangesFor[Log]=0
DumpMode=1
Так будет ещё и писать лог в файл "Input_Log.log"

form
20.03.2013, 01:20
Так будет ещё и писать лог в файл "Input_Log.log"

Сейчас RSTS/E доставится - посмотрим.

---------- Post added at 04:17 ---------- Previous post was at 03:31 ----------


@173000G«000»«000»«000»«000»«377»



Testing in progress - Please wait
Memory Size is 4088 K Bytes
9 Step memory test
Step 1 2 3 4 5 6 7 8 9


Message 04 Entering Dialog mode

Commands are Help, Boot, List, Setup, Map and Test.
Type a command then press the RETURN key: B DD/A

CSR address = 177560

Trying DD0«000»«1000»ing DD0«1000»«000»«004»«004»

Message 15
Non existent drive

Commands are Help, Boot, List, Setup, Map and Test.
Type a command then press the RETURN key:

---------- Post added at 04:20 ---------- Previous post was at 04:17 ----------

Походу загрузчик сначала делает чистую инициализацию (два INIT [004]), на это TU58 должен ответить "CONTINUE" (020).

Patron
20.03.2013, 12:37
Походу загрузчик сначала делает чистую инициализацию (два INIT [004]), на это TU58 должен ответить "CONTINUE" (020).Да, такой вариант не подходит.

Вот загрузчик, годящийся и для TU58, и для HX ( он же находится в файле TU58.SAV (http://zx.pk.ru/attachment.php?attachmentid=40531) ):


START: MOV #176570,R1
MOV #176574,R2
MOV R1,R0
INC @R2
10$: TSTB @R2
BPL .-2
ASL R0
BNE 20$
CLR @R2
MOV #4,R0
TST 2(R1)
20$: BIC #20,R0
MOV R0,2(R2)
BNE 10$
CLR R3
30$: TSTB @R1
BPL .-2
MOVB 2(R1),(R3)+
CMP #1000,R3
BHI 30$
CLR PC


Адреса регистров последовательного порта, используемого для загрузки - находятся в ячейках 01002 ( TKS: 176570 ) и 01006 ( TPS: 176574 ).

...

form
20.03.2013, 13:24
Это классический загрузчик из документации. Но его надо вручную набирать (ну или посылать в память терминалом). В прошивках такого не бывает.

form
24.03.2013, 01:55
Для общего развития наваял загрузчик с HX для KDJ11-B. Загрузчик совсем простой: не проверяет что считал, не отслеживает возможное отсутствие готовности передатчика. Определяет наличие HX и ругается если нету. В идеале надо ROM просить написать "starting system" сразу после определения наличия HX, но уже лень переделывать :)


Commands are Help, Boot, List, Setup, Map and Test.
Type a command then press the RETURN key: L

Device Unit
name numbers Source Device type

DU 0-255 CPU ROM RDnn, RXnn, RC25, RAnn
DL 0-3 CPU ROM RL01, RL02
DX 0-1 CPU ROM RX01
DY 0-1 CPU ROM RX02
DD 0-1 CPU ROM TU58
DK 0-7 CPU ROM RK05
MU 0-255 CPU ROM TK50, TU81
MS 0-3 CPU ROM TK25, TS05
XH 0-1 CPU ROM DECNET ETHERNET
NU 0-15 CPU ROM DECNET DUV11
NE 0-15 CPU ROM DECNET DLV11-E
NF 0-15 CPU ROM DECNET DLV11-F
HX 0 EEPROM TTY MUX

Commands are Help, Boot, List, Setup, Map and Test.
Type a command then press the RETURN key: B HX


Trying HX0

Message 15
Non existent drive

Commands are Help, Boot, List, Setup, Map and Test.
Type a command then press the RETURN key:

.TITLE HXBOOT

CSR == 177560 ;CSR ПО УМОЛЧАНИЮ

;DEC РЕКОМЕНДУЕТ ИСПОЛЬЗОВАТЬ НАЧАЛЬНЫЙ АДРЕС 40000.

.ASECT
.=40000

;ТОЧКА ВХОДА В ЗАГРУЗЧИК. В ЭТОМ МЕСТЕ:
; - MMU ВЫКЛЮЧЕН
; - 22-БИТНАЯ АДРЕСАЦИЯ ВЫКЛЮЧЕНА
; - ВЫБРАН ОСНОВНОЙ НАБОР РЕГИСТРОВ
; - R0 СОДЕРЖИТ UNIT (ВСЕГДА 0)
; - R1 СОДЕРЖИТ 0 ИЛИ УКАЗАННЫЙ CSR

START: TST R1 ;CSR УКАЗАН?
BNE 10$ ;ДА
MOV #CSR,R1 ;НЕТ, ИСПОЛЬЗУЕМ ОБЫЧНЫЙ
10$: MOV #IDENT,R5 ;ПОСЫЛАЕМ КОМАНДУ ПРОВЕРКИ
CALL SEND ;
MOV #2,R3 ;ПРИНИМАЕМ 2 БАЙТА
CALL RECV ;
BCS 30$ ;CS - НЕТ УСТРОЙСТВА
CMP #375,-(R4) ;HX ДОЛЖЕН ВЕРНУТЬ 375
BNE 40$ ;КЮ!
MOV #BOOT,R5 ;ПОСЫЛАЕМ КОМАНДУ ЗАГРУЗКИ
CALL SEND ;
MOV #512.,R3 ;ПРИНИМАЕМ ЗАГРУЗЧИК
CALL RECV ;
BCS 40$ ;КЮ!
MOV #1,R5 ;ЗАПРАШИВАЕМ "STARTING SYSTEM"

;В ДОКУМЕНТАЦИИ DEC, ПОПАВШЕЙ ПОД РУКУ, НИЧЕГО НЕ ГОВОРИТСЯ ПРО
;СТЕК. ОДНАКО ЕСЛИ ЕГО ОСТАВИТЬ БЕЗ ИЗМЕНЕНИЯ ПРИ ЗАПРОСЕ СООБЩЕНИЯ,
;АДРЕС ВОЗВРАТА ЗАТРЕТСЯ И БУДЕТ ОШИБКА "E 75". ДЛЯ ЗАПРОСА СООБЩЕНИЙ
;ОБ ОШИБКАХ УСТАНАВЛИВАТЬ СТЕК НЕ ТРЕБУЕТСЯ.

MOV #START,SP ;УСТАНАВЛИВАЕМ СТЕК
20$: CALL @#165762 ;ЗАПРАШИВАЕМ СООБЩЕНИЕ
CLR PC ;ЗАПУСКАЕМ СИСТЕМУ

30$: MOV #ERASE,R5 ;СТИРАЕМ МУСОР ОТ ЗАПРОСА HX
CALL SEND ;
MOV #275,R5 ;ОШИБКА - NONEXISTENT DRIVE
BR 20$ ;ВОЗВРАТ В ROM
40$: MOV #301,R5 ;ОШИБКА - DRIVE ERROR
BR 20$ ;ВОЗВРАТ В ROM

RECV:: MOV #-1,R2 ;УСТАНАВЛИВАЕМ ЧИСЛО ПОПЫТОК
10$: TSTB @R1 ;ЖДЕМ ГОТОВНОСТИ
BPL 20$ ;
MOVB 2(R1),(R4)+ ;ПОЛУЧАЕМ БАЙТ
SOB R3,RECV ;ЦИКЛИМСЯ ДО КОНЦА
RETURN ;ВОЗВРАТ (C СБРОШЕН - TSTB)
20$: SOB R2,10$ ;ПОВТОРЯЕМ ПОПЫТКУ
SEC ;УСТАНАВЛИВАЕМ C
RETURN ;ВОЗВРАТ

SEND:: MOVB (R5)+,R4 ;ПОЛУЧАЕМ КОЛИЧЕСТВО БАЙТОВ
10$: TSTB 4(R1) ;ЖДЕМ ГОТОВНОСТИ
BPL 10$ ;
MOVB (R5)+,6(R1) ;ПОСЫЛАЕМ БАЙТ
SOB R4,10$ ;ЦИКЛИМСЯ ДО КОНЦА
RETURN ;ВОЗВРАТ

IDENT: .BYTE 4,1,376,0,0
BOOT: .BYTE 3,4,10,0
ERASE: .BYTE 3,10,40,10

.END

PS. DAY в системе 5.4G которая идет в комплекте - стабильно "?MON-F-Trap to 4 001264"

hobot
24.03.2013, 04:55
PS. DAY в системе 5.4G которая идет в комплекте - стабильно "?MON-F-Trap to 4 001264"
Там в теме по загрузке УК-НЦ через С2 с HX сервера два варианта дискеты было - один я делал, другой фирменный от Patrona - на обоих монитор один и тот же и DAY.SAV соответственно то же.
На УК-НЦ такой проблемы вроде не возникало с обработчиком даты?
Мой вариант дискеты отработал на УК-НЦ в этом видео, http://www.youtube.com/watch?v=wexswhkpUf8&feature=youtu.be
но тож УК-НЦ )

form
24.03.2013, 08:36
На УК-НЦ такой проблемы вроде не возникало с обработчиком даты?

На УКНЦ он не выводит ничего в те же регистры на которых сервер диска висит.

Patron
24.03.2013, 13:09
DAY в системе 5.4G которая идет в комплекте - стабильно "?MON-F-Trap to 4 001264"Код там такой:



80 001254 016702 002020 Mov XPos, R2
81 001260 016767 002135 002362 Mov Day, PrvDay
82
83 001266 126727 002126 000030 CmpB Hour, #24.


Исходник ЗДЕСЬ (http://zx.pk.ru/showthread.php?postid=560509).

Patron
05.04.2013, 19:39
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_05.04.13_19-31

Изменения:

1. Теперь объект Terminal поддерживает 1-ю систему команд терминала 15ИЭ-00-013.

2. Улучшена совместимость объекта ODT_Loader с эмулятором пульта ДВК.

Patron
09.04.2013, 14:47
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_09.04.13_14-25

Изменения:

1. Исправлена кошмарная ошибка в адаптере COM-порта, приводившая к резкому увеличению использования процессора при создании объектов типа Terminal_ComPort_Adapter.

2. В образе HXsys54.DSK программа DAY.SAV улучшена до версии v2.0 ( исправлена ошибка, приводившая к вылету по Trap_To_4 на процессорах, не допускающих словного обращения к нечётному адресу ).

...

form
18.04.2013, 04:23
А можно сделать тестовый вариант для цом порта? - нужны индикаторы входящих сигналов и кнопки исходящих - как минимум интересны RI, DCD, DSR и DTR.

Patron
18.04.2013, 17:54
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_18.04.13_17-35

Изменения:

1. Отменено хранение состояния StopReading для объектов типа Terminal_ComPort_Adapter.

2. В объект Terminal_ComPort_Adapter добавлены состояния In_CTS, In_DSR, In_DCD, In_BRK, In_RNG, Out_RTS, Out_DTR, Out_BRK, позволяющие контролировать состояние всех этих сигналов COM-порта и управлять тремя последними. При работе порта в режиме HANDSHAKE по RTS и/или DTR - контроль и управление для соответствующего сигнала невозможны.

Пример использования находится в файле COM_4.cfg

3. В объект Config добавлены базовые параметры BackgroundColor_RGB, ErrBackgroundColor_RGB, WarnBackgroundColor_RGB, FontFace, FontSize, управляющие отображением информации на системной консоли.

Базовые значения указанных параметров задаются в файле Config.ini

form
22.04.2013, 12:45
Еще предложение: сделать возможность реконнекта вручную по CR при ReConnect=0.

Patron
22.04.2013, 13:49
Еще предложение: сделать возможность реконнекта вручную по CR при ReConnect=0.Сейчас я добавляю в консоль режим имитации принтера. Чтобы сделать релиз и перейти к модификации IP-адаптера - нужно выбрать начальный объём "принтерных фич" консоли.

Думаю, это будут:

1. Константа PrinterMode, задающая режим принтера: 0 - консоль Win1251, 1 - принтер КОИ8 + КОИ7, 2 - принтер КОИ8 + TRANSLIT.
2. Константа PrinterPaperColor_RGB, задающая цвет бумаги для принтера.
3. Константа PrinterLeftMargin_px, задающая левый отступ от края поля вывода в пикселах при выводе на принтер.

Остальное подождёт до следующих релизов.

Patron
23.04.2013, 23:12
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_23.04.13_17-48

Изменения:

1. Внесены изменения, описанные ЗДЕСЬ (http://zx.pk.ru/showthread.php?p=595846#post595846).

2. В объект Terminal_IP_Adapter добавлены состояния Connect и Connected, позволяющие контролировать состояние соединения и управлять им.

Пример использования добавлен в файлы IP.cfg, CTAKAH.cfg, OpenVMS.cfg, MIM.cfg.


[IP_Adapter.ini]
Listen_on_IP =""
Listen_on_Port = 0
Connect_to_IP = 127.0.0.1
Connect_to_Port= 8023
Extended_Log=0
ReConnect=1
InitialStateOf[Connect]=1
SaveChangesFor[Connect]=0

Если в секции [IP_Adapter.ini] установить InitialStateOf[Connect] = 0 - при загрузке конфига исходящее соединение устанавливаться не будет.
Если установить SaveChangesFor[Connect] = 1 - при закрытии конфига будет запоминаться последнее состояние кнопки.

form
27.06.2013, 15:56
Опробовал загрузку с HX через консоль, подключенную через DECserver - пашет. Один минус, что-то сделать с сессией после подключения уже нельзя - надо с соседнего терминала отцеплять :)

Patron
18.11.2013, 18:04
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_18.11.13_17-57

Изменения:

1. Исправлена генерация клавишами кодов букв. Например - в предыдущих версиях было невозможно ввести с клавиатуры маленькие русские буквы "х ж э б ю" в режиме CapsLock.

...

Patron
19.12.2013, 00:30
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_19.12.13_00-19

Изменения:

1. Исправлены несколько ошибок, в том числе серьёзная ошибка во всех классах виджетов, приводившая к неопределённому поведению при закрытии конфига с виджетами на полосах окон ( таких конфигов пока не было ).

2. Теперь окно любой консоли ( кроме системной консоли конфига ) можно очистить, нажав <Ctrl><Delete> ( на формирование лога консоли очистка окна не влияет ).

3. В объект Console добавлено скрытое состояние ClearScreen, активирующее очистку окна консоли при переводе этого состояния в положение ON.

4. Число строк в текстовом буфере обычной консоли увеличено с 400 до 1000.

Titus
19.12.2013, 00:44
А с использованием чего написаны твои эмуляторы? MFC? WinAPI? Или еще что? Ты пользовался конструктором форм (если он в данной среде есть), или все ручками?

Patron
19.12.2013, 00:49
Только голый Win32API + модульный API моей разработки ( он, похоже, уже сложнее ранних версий UNIX ).

hobot
19.12.2013, 01:28
он, похоже, уже сложнее ранних версий UNIX
То ли ещё будет? )


текущая сборка эмулятора терминала типа VT52: VT52_19.12.13_00-19 (http://zx.pk.ru/attachment.php?attachmentid=44596&d=1387398205)

shattered
19.12.2013, 10:17
Процитирую классика (jwz):


Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can.


:)

Titus
19.12.2013, 12:17
Процитирую классика (jwz):

:)

Переведу для руссоязычных цитату Джанислова Вежи Зеленеца (ведь каждый русскоязычный знает, что аббревиатура jwz переводится именно так):

'Любая программа пытается расширять свой функционал до тех пор, пока не сможет читать почту. Те программы, которые до такой степени усложниться не могут, заменяются теми, которые смогут.'

MiX
19.12.2013, 16:19
Patron, Не могу создать соединение pdp11+vt52 через компорт. Если первым загружаю pdp11 то конфиг проходит нормально но на vt52 не проходит. Так-же и наоборот загружаю первым vt52 конфиг проходит но на pdp11 нет.Где подправить нужно?
p.s. На ip конфигурации работает отлично.

Patron
19.12.2013, 16:32
Не могу создать соединение pdp11+vt52 через компорт.Через реальную пару COM-портов, соединённых кабелем, или через виртуальную пару COM-портов com0com ?

MiX
19.12.2013, 16:58
Через реальную пару COM-портов, соединённых кабелем, или через виртуальную пару COM-портов com0com ?

Через виртуальную, то-есть на одном компьютере работают две программы. COM порт (1) в списке устройств есть, реально ни к чему не подключен.

Patron
19.12.2013, 17:06
Через виртуальную, то-есть на одном компьютере работают две программы. COM порт (1) в списке устройств есть, реально ни к чему не подключен.А драйвер com0com (http://sourceforge.net/projects/com0com/) установлен ?

Если нет - надо скачать и установить. В списке COM-портов появятся ещё два порта и вот их и надо указывать в настройках - один порт в одной программе, а другой - в другой программе.

Когда в компьютере только один COM-порт - две программы через него общаться не могут. Для связи через COM-порт всегда надо ДВА соединённых порта.

MiX
19.12.2013, 17:47
Patron, Сейчас уже на мат. платы коп порты почти не устанавливают, как и сокращают pci до одного. Предлагаю данный драйвер включить в сборку+инструкцию в шапку дописать.


А драйвер com0com установлен ?
Нет

---------- Post added at 16:47 ---------- Previous post was at 16:27 ----------


Когда в компьютере только один COM-порт - две программы через него общаться не могут.

То-есть не могут поделить ресурс?


Для связи через COM-порт всегда надо ДВА соединённых порта.

Получается без драйвера надо порты соединить нуль модемным кабелем на одном компьютере.

Patron
30.12.2013, 20:06
Обновилась текущая сборка эмулятора терминала типа 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
~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~
!ю#¤%ч&*()+? | +!"#¤%&'()ъ=<> | Ч!ю#¤%Ю&*()ъ+Э
ЙЦУКЕНГШЩЗХъ | ЙЦУКЕНГШЩЗХ* | ЯВЕРТЫУИОПШЩ
ФЫВАПРОЛДЖЭ | ФЫВАПРОЛДЖЭ | АСДФГХЙКЛ:"
ЯЧСМИТЬБЮ, | ЯЧСМИТЬБЮ? | ЗЬЦЖБНМ<>?

MiX
03.01.2014, 22:11
Patron, Я подключил клавиатуру МС7004 через ком порт а терминал выдаёт не те символы. Нажимаю Й выдаёт Ь ,нажимаю С выдаёт хЬ. Может у клавиатуры свой протокол?

Patron
04.01.2014, 18:06
Я подключил клавиатуру МС7004 через ком порт, а терминал выдаёт не те символы. Нажимаю Й выдаёт Ь ,нажимаю С выдаёт хЬ. Может у клавиатуры свой протокол?Клавиатура МС 7004 шлёт сканкоды ( см. приложение (http://zx.pk.ru/attachment.php?attachmentid=44857) ).

Я могу написать адаптер для этой клавиатуры, но надо записать коды нажатия ( и, если есть - коды отжатия ) для всех без исключения её клавиш.

В файл конфигурации можно добавить следующие строки:


[objects]
Dump = Ядро:Console

[links]
ComPort > Dump

[Dump.ini]
InitialStateOf[Log] = 1
DumpMode = 7


на панели закладок появится окно "Dump" с консолью, на которую будут выводиться байты, поступающие из COM-порта. Содержимое консоли также будет писаться в файл Dump.log

После нажатия всех клавиш - можно зажать пробел и убедиться, что при автоповторе МС 7004 шлёт не код нажатой клавиши, а специальный код автоповтора.

Затем файл Dump.log надо заархивировать и выложить здесь. После этого я напишу фильтр для потока байтов, преобразующий входной поток формата МС 7004 в выходной поток формата ASCII.
...

MiX
04.01.2014, 20:11
Спасибо Патрон,только пока ничего не могу сделать. У меня не все клавиши работают.

MiX
09.01.2014, 22:47
Патрон,пришлось вручную набивать сканкоды, так-как есть от 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

Patron
09.01.2014, 23:02
СканкодыПохоже, что COM-порт настроен в эмуляторе на скорость 9600, поэтому принимает по два байта при каждом нажатии, хотя клавиатура передаёт по одному байту на скорости 4800;8N1.

Чтобы в эмуляторе настроить COM-порт на скорость клавиатуры МС 7004 - надо установить следующие настройки в файле Terminal_ComPort_Adapter.ini:



BaudRate = CBR_4800
Parity = NOPARITY
StopBits = ONESTOPBIT
ByteSize = 8

MiX
09.01.2014, 23:45
Сканкоды при 4800
264 автоповтор

Patron
10.01.2014, 01:10
Сканкоды при 4800Супер!

Все коды совпадают с описанием, кроме [~] и [ъ], которые в описании указаны наоборот: ~ = 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/Machines/DEC/LK201_large_keycodes.jpg

hobot
10.01.2014, 04:07
Для сравнения - сканкоды ( шестнадцатеричные ) клавиатуры LK201:
А что это за клава такая загадочная? )

CodeMaster
10.01.2014, 09:18
А что это за клава такая загадочная? )

Да что загадочного, оригинал (http://en.wikipedia.org/wiki/LK201) с которого делали МС 7004

Patron
10.01.2014, 13:51
1. Надо бы протестировать, какие коды будет генерить МС 7004, если при нажатой клавише <СУ> нажать и отпустить <ВР>. Судя по описанию LK201 - при отпускании <ВР> в этом случае сгенерится 256 ( т.е. тот же код, что и при нажатии <ВР> ), а при отпускании <СУ> - код 263.

2. Если при нажатой <СУ> нажать <ВР> и отпустить <СУ> - то при отпускании <СУ> ( похоже ) должен сгенериться код 257 ( т.е. тот же код, что и при нажатии <СУ> ), а при отпускании <ВР> - код 263.

3. Можно настроить в терминале клавишу <F12> на отправку в МС 7004 кода сброса, для чего добавить в раздел [VT52.ini] в используемом файле конфигурации параметр ANSI_STR_FOR_KEY[F12]:


[VT52.ini]

ANSI_STR_FOR_KEY[F12] = "\375"

Из окна терминала отправить в МС 7004 код сброса. Ответ должен быть 001 000 000 000.

Горит ли после сброса лампочка [ ЛАТ ] на МС 7004 ?

Titus
10.01.2014, 14:05
1. Надо бы протестировать, какие коды будет генерить МС 7004, если при нажатой клавише <СУ> нажать и отпустить <ВР>. Судя по описанию LK201 - при отпускании <ВР> в этом случае сгенерится 256 ( т.е. тот же код, что и при нажатии <ВР> ), а при отпускании <СУ> - код 263.

А исходник прошивки от 7004 разве не дает вам ответов на эти все вопросы?

Alex_K
10.01.2014, 14:12
Клавиатура МС 7004 имеет свое firmware, которое не совпадает с firmware LK201. И кое-что из того, что может LK201, МС 7004 не может. Что бы особо не гадать, дизассемблированную прошивку МС7004 я уже выкладывал здесь (http://zx.pk.ru/showpost.php?p=461033&postcount=1447), заодно там же и для КСМ. Отсюда (http://www.d-wanderer.pisem.net/doc1/kbrd.djvu) можно скачать документацию на МС 7004, выглядит получше, чем ранее выложенная.

Patron
10.01.2014, 15:41
А исходник прошивки от 7004 разве не дает вам ответов на эти все вопросы?Мне не даёт ( есть проблемы с пониманием исходников ).

А Вам даёт..

Какие коды cгенерит клавиатура МС 7004, если нажать <СУ>, нажать левый <ВР>, нажать правый <ВР>, отпустить <СУ>, отпустить левый <ВР>, отпустить правый <ВР> ?

Alex_K
10.01.2014, 16:37
Мне не даёт ( есть проблемы с пониманием исходников ).
А в чем проблема? Контроллер вроде простой, схема клавиатуры есть, ассемблер простенький. Если малопонятные комментарии, то прошу прощения, так написал. Конструктивную критику с удовольствием приму.

А Вам даёт..
Мне дает, т.к. я это фирмваре и дизассемблировал и вникал в принцип работы. Хотя с тех времен кое-что уже подзабылось.

Какие коды cгенерит клавиатура МС 7004, если нажать <СУ>, нажать левый <ВР>, нажать правый <ВР>, отпустить <СУ>, отпустить левый <ВР>, отпустить правый <ВР> ?
нажать <СУ> - 0257 (0xAF)
нажать левый <ВР> - 0256 (0xAE)
нажать правый <ВР> - 0256 (0xAE)
отпустить <СУ> - 0263 (0xB3)
отпустить левый <ВР> - 0263 (0xB3)
отпустить правый <ВР> - 0263 (0xB3)

Да, внутри себя клавиатура различает левый и правый ВР, но наружу идет один код 0256. Так что, если пришло два кода 0256, значит нажали два ВР-а. А вот с отжатием плохо - всегда передается код 0263. Клавиатура внутри запоминает три нажатых клавиши (кроме СУ и ВР-ов), код автоповтора только один - 0264.

Patron
10.01.2014, 17:05
Да, внутри себя клавиатура различает левый и правый ВР, но наружу идет один код 0256. Так что, если пришло два кода 0256, значит нажали два ВР-а.По виду исходника у меня создалось впечатление, что если нажать один ВР - нажатие другого не генерит кодов, как и отжатие ВР, если другой нажат.

Кроме этого, если при нажатом СУ нажать ВР и отжать СУ - клавиатура должна при отжатии СУ послать код нажатия СУ - иначе она не будет совместима с родными операционками Pro-350.

По стандарту LK201 - код отжатия передаётся только для последней отжатой клавиши <СУ> | <ВР>. Когда при отжатии <СУ> | <ВР> - другая клавиша ещё нажата - должен передаваться код нажатия отжимаемой клавиши, а не код отжатия. Только так клавиатура сможет работать с родными операционками Pro-350.

Alex_K
10.01.2014, 17:34
По виду исходника у меня создалось впечатление, что если нажать один ВР - нажатие другого не генерит кодов, как и отжатие ВР, если другой нажат.
Откуда такое впечатление? Проверка кодов идет по адресам 0x18C-0x197, там только проверяется, что при сканировании матрицы клавиатуры клавиши СУ и ВР-ы находятся в нажатом состоянии. А уже далее, если они нажаты, проводится их обработка. Ячейка с адресом 0x36 содержит признаки нажатия на регистровые клавиши: 0 бит - СУ, 1 бит - правый ВР, 2 бит - левый ВР. Соответственно обработка их нажатия проводится по адресам: 0x1CD - 0x1D4 - СУ, 0x1D5 - 0x1E1 - левый ВР, 0x1E2 - 0x1EE - правый ВР. Суть обработки заключается в том, что если клавиша уже нажата (стоит бит признака), то ничего не делаем, а иначе ставим соответствующий бит и передаем код в ЭВМ (или терминал), при этом код правого ВР (0x00) заменяется на код левого ВР (0xAE).

Кроме этого, если при нажатом СУ нажать ВР и отжать СУ - клавиатура должна при отжатии СУ послать код нажатия СУ - иначе она не будет совместима с родными операционками Pro-350.

По стандарту LK201 - код отжатия передаётся только для последней отжатой клавиши <СУ> | <ВР>. Когда при отжатии <СУ> | <ВР> - другая клавиша ещё нажата - должен передаваться код нажатия отжимаемой клавиши, а не код отжатия. Только так клавитаура сможет работать с родными операционками Pro-350.
Уж не знаю как там в LK201, его фирмваре я не смотрел, а у нас в МС 7004 обработка отжатия регистровых клавиш идет по адресам 0x200-0x236. Смысл их такой, что если шло сканирование регистровой клавиши, а она была не нажата, а ее признак нажатия установлен, то соответствующий признак сбрасывается и посылается код 0xB3.

Patron
10.01.2014, 17:48
Суть обработки заключается в том, что если клавиша уже нажата (стоит бит признака), то ничего не делаемВот поэтому впечатление и возникло. Типа, если нажата одна из клавиш ВР - при обработке нажатия/отжатия другой клавиши ВР ничего не делаем.


Смысл их такой, что если шло сканирование регистровой клавиши, а она была не нажата, а ее признак нажатия установлен, то соответствующий признак сбрасывается и посылается код 0xB3.Код 0xB3 называется ALL_UP ( все UP_DOWN-клавиши отжаты ). Если нажать СУ и ВР - драйвер клавиатуры получит коды нажатия СУ и ВР и установит флаги СУ и ВР. Если при отжатии одной из этих клавиш придёт код ALL_UP - драйвер обязан сбросить все флаги, иначе он окажется в неопределённом состоянии.

Поэтому, чтобы отжатие СУ при нажатой ВР могло быть правильно опознано драйвером клавиатуры - отжатие СУ при нажатой ВР должно посылать код нажатия СУ, а отжатие ВР при нажатой СУ - должно посылать код нажатия ВР.

Alex_K
10.01.2014, 18:01
Код 0xB3 называется ALL_UP ( все UP_DOWN-клавиши отжаты ). Если нажать СУ и ВР - драйвер клавиатуры получит коды нажатия СУ и ВР и установит флаги СУ и ВР. Если при отжатии одной из этих клавиш придёт код ALL_UP - драйвер обязан сбросить все флаги, иначе он окажется в неопределённом состоянии.

Поэтому, чтобы отжатие СУ при нажатой ВР могло быть правильно опознано драйвером клавиатуры - отжатие СУ при нажатой ВР должно посылать код нажатия СУ, а отжатие ВР при нажатой СУ - должно посылать код нажатия ВР.
Там же в архиве была и прошивка КСМ. Подпрограмма по адресу 0x587 обрабатывает этот код отжатия. Сначала проверяется признак нажатия СУ, ну и если нажата, то признак сбрасывается. А вот если СУ не нажата, то тогда жестко очищается признак нажатия ВР.

---------- Post added at 18:01 ---------- Previous post was at 17:55 ----------


... Только так клавиатура сможет работать с родными операционками Pro-350.
А зачем нам родная операционка? Родная ничего не знает про клавишу РУС/ЛАТ, а на МС 7004 она есть, а на LK201 её нет.

Patron
10.01.2014, 18:03
Подпрограмма КСМ по адресу 0x587 обрабатывает этот код отжатия. Сначала проверяется признак нажатия СУ, ну и если нажата, то признак сбрасывается. А вот если СУ не нажата, то тогда жестко очищается признак нажатия ВР.Получается, что если при работе с КСМ нажать СУ и ВР, а потом отжать ВР, то КСМ сбросит флаг СУ, оставив флаг ВР.

Alex_K
10.01.2014, 18:09
Получается, что если при работе с КСМ нажать СУ и ВР, а потом отжать ВР, то КСМ сбросит флаг СУ, оставив флаг ВР.
Получается, что так. Так же сделано и в прошивке КЦГД.

---------- Post added at 18:09 ---------- Previous post was at 18:05 ----------

Надеюсь вечером появится MiX, и уже на практике ответит на все поставленные вопросы.

Patron
10.01.2014, 18:19
Получается, что так.Похоже, что разработчики МС 7004 просто не поняли, в чём суть. Какой смысл отдельно обрабатывать нажатия двух клавиш ВР и при этом дважды посылать одинаковый код нажатия, тогда как в LK201 такого в принципе не может быть, т.к. тогда при нажатой СУ невозможно было бы отличить отжатие первой нажатой ВР от нажатия второй.

Alex_K
10.01.2014, 19:02
Посмотрел документацию на LK201, большое отличие по аппаратной части от МС 7004, да и такое ощущение, что LK201 на голову выше МС 7004. У МС 7004 опрос клавиатуры идет побитно, выбирается необходимая строка и столбец из матрицы и смотрится состояние триггера два раза через небольшой интервал времени (дребез контактов таким образом проверяют программно). У LK201 опрос идет побайтно, есть шестнадцать строк, а столбец из 8 бит читается одним махом. У МС 7004 на пищалку сигнал частотой 2 кГц делается программным способом, дрыгается битик с нужными паузами между переключениями. У LK201 есть генератор частоты на 2 кГц, звук можно включить/выключить, да еще задать восемь уровней громкости. С программной части управления клавиатурой у LK201 тоже все шире, кроме того, что можно узнать идентификатор, прочитать состояние DIP-ов, можно задавать отдельные режимы на разные группы клавиш - как только передавать нажатие, автоповтор, передавать нажатие и отжатие.

MiX
10.01.2014, 20:07
СУ нажата 257
ВР нажата 256
ВР отжата 263
СУ отжата 263


СУ нажата 257
ВР нажата 256
СУ отжата 263
ВР отжата 263

при отправке F12 клавиатура молчит. Терминал шлет 106 061 062 040 (замкнул вход на выход без клавиатуры)
п.с. Патрон, добавь пожалуйста очистку экрана в VT52.

Alex_K
10.01.2014, 20:11
СУ нажата 257
ВР нажата 256
ВР отжата 263
СУ отжата 263


СУ нажата 257
ВР нажата 256
СУ отжата 263
ВР отжата 263
Спасибо, MiX! А если задействовать два ВР-а? И ещё интересно одновременное нажатие нескольких алфавитно-цифровых клавиш, МС 7004 обрабатывает до трех нажатий одновременно, и как в этом случае с автоповтором.

MiX
10.01.2014, 20:47
И ещё интересно одновременное нажатие нескольких алфавитно-цифровых клавиш.
Поконкретней пожалуйста чтоб не было путаницы. В общем всё по пунктам.

Alex_K
10.01.2014, 20:54
Поконкретней пожалуйста чтоб не было путаницы. В общем всё по пунктам.
1. Нажать СУ, нажать левый ВР, нажать правый ВР, отпустить СУ, отпустить левый ВР, отпустить правый ВР.
2. Нажать 1, пауза около секунды, нажать 2, пауза около секунды, нажать 3, пауза около секунды, нажать 4, пауза около секунды, отпустить 4, пауза около секунды, отпустить 3, пауза около секунды, отпустить 2, пауза около секунды, отпустить 1.

MiX
10.01.2014, 21:25
1-257,256,256,263,263,263
2-300,305,313 на 4 уходит в автоповтор

Patron
10.01.2014, 21:34
при отправке F12 клавиатура молчит. Терминал шлет 106 061 062 040 (замкнул вход на выход без клавиатуры)При нажатии F12 терминал шлёт те коды, которые назначены на эту клавишу ( как и любую другую клавишу с изменяемыми кодами ).

Если открыть файл Terminal.ini - можно узнать, какие коды назначены на изменяемые клавиши:



ANSI_STR_FOR_KEY[F1] = "Help me !!! "
ANSI_STR_FOR_KEY[F2] = "Dir\015"
ANSI_STR_FOR_KEY[F3] = "F3 "
ANSI_STR_FOR_KEY[F4] = "F4 "
ANSI_STR_FOR_KEY[F5] = "\033g"
ANSI_STR_FOR_KEY[F6] = "\033h"
ANSI_STR_FOR_KEY[F7] = "\033S"
ANSI_STR_FOR_KEY[F8] = "\033c"
ANSI_STR_FOR_KEY[F9] = "\033\024"
ANSI_STR_FOR_KEY[F10] = "\033\010"
ANSI_STR_FOR_KEY[F11] = "\033\023"
ANSI_STR_FOR_KEY[F12] = "F12 "

ANSI_STR_FOR_KEY[Insert] = "\033P"
ANSI_STR_FOR_KEY[Delete] = "\033e"
ANSI_STR_FOR_KEY[Home] = "\033Q"
ANSI_STR_FOR_KEY[End] = "\033f"
ANSI_STR_FOR_KEY[PageUp] = "\033R"
ANSI_STR_FOR_KEY[PageDown] = "\033d"

ANSI_STR_FOR_KEY[PF1] = "\033P"
ANSI_STR_FOR_KEY[Pad_Slash] = "\033Q"
ANSI_STR_FOR_KEY[Pad_Star] = "\033R"
ANSI_STR_FOR_KEY[Pad_Minus] = "\033S"
ANSI_STR_FOR_KEY[Pad_Plus] = "\012"

ANSI_STR_FOR_KEY[Pad_Dot] = "."
ANSI_STR_FOR_KEY[Pad_Enter] = "\015"

ANSI_STR_FOR_KEY[Backspace] = "\177"
ANSI_STR_FOR_KEY[Enter] = "\015"


ANSI_STR_FOR_KEY[LCtrl] = "\016"
ANSI_STR_FOR_KEY[RCtrl] = "\017"
ANSI_STR_FOR_KEY[LWin] = "\016"
ANSI_STR_FOR_KEY[RWin] = "\017"
ANSI_STR_FOR_KEY[LAlt] = "\016"
ANSI_STR_FOR_KEY[RAlt] = "\017"

ANSI_STR_FOR_KEY[Apps] = "\012"


Понятно, что если не изменить назначенные коды для клавиши F12 - она так и будет слать строку: "F12 " ( 106 061 062 040 ) при каждом нажатии.

Чтобы вместо строки "F12 " отправить при нажатии на клавишу F12 код сброса - нужно изменить назначение кодов для клавиши F12.

Можно сделать это прямо в файле Terminal.ini, а можно - в разделе [VT52.ini] используемого файла конфигурации:



ANSI_STR_FOR_KEY[F12] = "\375"

MiX
10.01.2014, 21:54
Можно сделать это прямо в файле Terminal.ini, а можно - в разделе [VT52.ini] используемого файла конфигурации.
На [VT52.ini] не работает (не тот код шлет). После добавления в Terminal.ini сработало, код 001 000 000 000. Светодиод лат. не горит. Да он и не должен гореть от сброса, там другой код.

Patron
10.01.2014, 22:08
Светодиод лат. не горит. Да он и не должен гореть от сброса, там другой код.Учитывая, что при сбросе любого терминала устанавливается режим LAT, переход клавиатуры по сбросу в режим RUS - тоже не самый ловкий ход. Значит, при запуске конвертера MS7004-ASCII - он должен посылать код сброса, а потом сразу включать светодиод LAT.

Можно назначить на какие-нибудь F-клавиши коды включения/выключения светодиода LAT и проверить, как это работает:



ANSI_STR_FOR_KEY[F3] = "\021\220" ; Включить LAT
ANSI_STR_FOR_KEY[F4] = "\023\220" ; Выключить LAT

MiX
10.01.2014, 22:20
Можно назначить на какие-нибудь F-клавиши коды включения/выключения светодиода LAT и проверить, как это работает:

Работает.Правда логичнее уже добавить к pdp11. В идеале так: pdp11 открывает ком порт (к примеру 1) на скорости 4800 для МС 7004 + открывает 2 на скорости 9600 для VT52.

Patron
10.01.2014, 23:35
В идеале так: pdp11 открывает ком порт (к примеру 1) на скорости 4800 для МС 7004 + открывает 2 на скорости 9600 для VT52.Модульный эмулятор везде одинаковый, название exe-файла влияет только на то, какой ini-файл читается при его запуске - pdp11.exe читает pdp11.ini, VT52.exe читает VT52.ini ( и т.д. ).

Если ( например ) есть реальная ДВК, реальный терминал 15ИЭ-00-013 без клавиатуры и реальная клавиатура МС 7004, то на PC с тремя реальными COM-портами можно сделать даже так, чтобы к одному реальному терминальному порту реальной ДВК подключить одновременно - реальный терминал 15ИЭ-00-013 на вывод и реальную клавиатуру МС 7004 ( через конвертер ) на ввод.

Vamos
10.01.2014, 23:51
Модульный эмулятор везде одинаковый, название exe-файла влияет только на то, какой ini-файл читается при его запуске - pdp11.exe читает pdp11.ini, VT52.exe читает VT52.ini ( и т.д. ).
А если все ini в один файл слить, что будет? ))

Patron
11.01.2014, 00:09
А если все ini в один файл слить, что будет? ))Ничто не мешает создать в отдельном каталоге "зоопарк" и поэкспериментировать.

Модульный API позволяет иметь в одном каталоге любое количество эмуляторов одновременно. Держать разные эмуляторы в разных каталогах хорошо тогда, когда ( например ) используются одноимённые файлы DSK-образов с разным содержимым.

Одновременно запущенным эмуляторам тоже лучше работать с разными файлами образов, если при работе в образах планируется что-то изменять.

Если запрошенный ini-файл отсутствует - он создаётся со значениями по умолчанию. Слитие всех ini-файлов в один будет полностью эквивалентно простому удалению всех остальных ini-файлов и на работу эмулятора существенно повлиять не должно.

Vamos
11.01.2014, 00:44
Если запрошенный ini-файл отсутствует - он создаётся со значениями по умолчанию. Слитие всех ini-файлов в один будет полностью эквивалентно простому удалению всех остальных ini-файлов и на работу эмулятора существенно повлиять не должно.
Т.е. в одном окне все три модуля/эмулятора не будет, будет только какой-то один.

Patron
11.01.2014, 01:07
Т.е. в одном окне все три модуля/эмулятора не будет, будет только какой-то один.Эмулятор ( в смысле exe-файл загрузчика модульного API ) только читает свой ini-файл, узнаёт там, какой "корневой" cfg-файл надо загрузить, ищет модуль Main_module.em, заказывает там создание объекта Config и передаёт созданному объекту путь к корневому файлу конфигурации, который он прочитал в ini-файле. Окна выводит уже объект Config, программа для которого ( на специальном языке описания конфигураций ) написна в загружаемом файле конфигурации *.cfg

По сути, "эмулятор" - это текстовый cfg-файл, а exe-загрузчик - это просто интерпретатор загружаемой cfg-программы.

Можно написать конфиг, который будет загружать несколько других конфигов - тогда в закладках главного окна будет то, что было бы в главном окне эмулятора при загрузке каждого из этих конфигов как основного.

Ну, и не забудем, что любую закладку ( кроме системной консоли корневого конфига ) можно освободить в отдельное окно - тогда каждый загруженный конфиг будет в отдельном окне, но все они будут в одном общем процессе.

hobot
11.01.2014, 04:01
Эмулятор ( в смысле exe-файл загрузчика модульного API ) только читает свой ini-файл, узнаёт там, какой надо загрузить корневой конфиг, ищет модуль Main_module.em, заказывает там создание объекта Config и передаёт созданному объекту путь к корневому файлу конфигурации, который он прочитал в ini-файле. Окна выводит уже объект Config, программа для которого ( на специальном языке описания конфигураций ) написна в загружаемом файле конфигурации *.cfg

Можно написать конфиг, который будет загружать несколько других конфигов - тогда у закладок главного окна будут имена загруженных cfg-файлов, а в этих закладках - то, что было бы в главном окне эмулятора при загрузке этого конфига как основного.

Ну, и не забудем, что любую закладку ( кроме системной консоли корневого конфига ) можно освободить в отдельное окно - тогда каждый загруженный конфиг будет в отдельном окне, но все они будут в одном общем процессе.

Мощь! :biggrin:

Patron
12.01.2014, 19:39
Тестовая сборка "эмулятора ДВК": DVK_Emulator_12.01.14_18-32

Изменения:

1. В модуль Terminal_module.em добавлен объект MS7004_Converter, предназначенный для конвертации сканкодов клавиатуры МС 7004 к ASCII-коды клавиатуры обычного терминала PDP-11.

2. Добавлен файл конфигурации MS7004_Converter.cfg, содержащий пример использования объекта MS7004_Converter для работы эмулятора ДВК с реальной клавиатурой МС 7004, подключенной к порту COM1. Имя COM-порта Windows, к которому подключена клавиатура - задаётся параметром PortName раздела [MS7004_ComPort.ini]:



[MS7004_ComPort.ini]
PortName = COM1
BaudRate = CBR_4800
Parity = NOPARITY
StopBits = ONESTOPBIT
ByteSize = 8
fDtrControl = DTR_CONTROL_ENABLE
fRtsControl = RTS_CONTROL_HANDSHAKE
fOutxCtsFlow = FALSE
fOutxDsrFlow = FALSE
InitialStateOf[ShowPortUse]=0
SaveChangesFor[ShowPortUse]=0
MinimalBreakTime_MKS=3000


3. Теперь экран и буфер вывода терминала можно полностью очистить, нажав <Ctrl><Delete> ( точно так же, как и у консоли ).

...

При запуске эмулятора с подключенной к COM-порту клавиатурой или при подключении ( включении питания ) клавиатуры при работающем эмуляторе - конвертер должен автоматичеки опознавать наличие клавиатуры, выводить сообщение о подключении клавитауры на системную консоль и устанавливать на клавиатуре лампочки ЛАТ и КОМПОЗ в соответствии с текущим состоянием РУС/ЛАТ и режимом дополнительной клавиатуры.

Помимо терминальных кодов - режим дополнительной клавиатуры должен также изменяться клавишей <КМП>.

Клавиша <ФКС> должна работать в точности как <CapsLock>.

Клавиши над блоком стрелок должны генерить коды Ruslo3, пустая клавиша рядом с забоем должна генерить ПС.

---------- Post added at 18:39 ---------- Previous post was at 18:32 ----------

При передаче портом терминала кода Bell - клавиатура должна пищать.

MiX
12.01.2014, 20:15
Тестовая сборка "эмулятора ДВК":

Тема VT52, ну да ладно


предназначенный для подключения клавиатуры МС 7004 к обычному терминальному порту PDP-11.

Порт вообще-то необычный, точнее только для клавиатуры (в моём случае КЦГД).



и устанавливать на клавиатуре лампочки ЛАТ и КОМПОЗ в соответствии с текущим состоянием РУС/ЛАТ

Только ЛАТ,притом на РУС не переключается.


и режимом дополнительной клавиатуры.

Что за режим?


При передаче портом терминала кода Bell - клавиатура должна пищать.

Клавиатура пищит в любом случае при подключении питания. Отдельно при включённой клавиатуре запуская PDP11 клавиатура не пищит.

Patron
12.01.2014, 20:27
Порт вообще-то необычный, точнее только для клавиатуры (в моём случае КЦГД).К КЦГД клавиатура подключается без конвертера. Конвертер же нужен для того, чтобы клавиатуру МС 7004 ( через конвертер ) можно было подключить к самому обычному терминальному порту ( хоть настоящему, хоть эмулируемому ).


Только ЛАТ,притом на РУС не переключается.Чтобы проверить работу в режиме РУС - надо запустить экранный редактор. Например, так:



.EDIK SY:STRTSB.COM/I
Когда на экране появится текст - можно нажать клавишу <РУС/ЛАТ> и проверить набор русского текста.


Что за режим?В режиме ДКЛ дополнительная клавиатура шлёт не цифры, а специальные кодовые последовательности. Если лампочка КОМПОЗ не горит - шлёт цифры, если горит - шлёт коды. Переключать можно как программно, так и нажимая клавишу <КМП>.


Клавиатура пищит в любом случае при подключении питания. Отдельно при включённой клавиатуре запуская PDP11 клавиатура не пищит.Если конвертер на системной консоли пишет, что "Клавиатура МС 7004 подключена" - то всё в порядке.

---------- Post added at 19:27 ---------- Previous post was at 19:27 ----------

Пищать клавиатура должна одновременно с терминалом. Если, например - нажать забой в крайней левой позиции командной строки KMON.

MiX
12.01.2014, 21:25
к самому обычному терминальному порту ( хоть настоящему, хоть эмулируемому ).

Где порт находится на PC или на ДВК? Если на ДВК то это КЦГД (на КСМе вроде другая клавиатура использовалась). Если на PC то это RS232 (COM порт),и терминальный он только на промышленных и встраиваемых компах.То-есть можно видеть загрузку,войти в биос, управлять им через RS232 другого компа (например через Гипертерминал). Ну да ладно,не суть.


Чтобы проверить работу в режиме РУС - надо запустить экранный редактор. Например, так:



.EDIK SY:STRTSB.COM/I
Когда на экране появится текст - можно нажать клавишу <РУС/ЛАТ> и проверить набор русского текста.

В РУС переходит а обратно в ЛАТ нет.



Если конвертер на системной консоли пишет, что "Клавиатура МС 7004 подключена" - то всё в порядке.

Да пишет.


Пищать клавиатура должна одновременно с терминалом.

Нет не пищит.


Если, например - нажать забой в крайней левой позиции командной строки KMON.

Да пищит.

Patron
12.01.2014, 22:13
Где порт находится на PC или на ДВК?Конвертер работает с COM-портами на PC. Один COM-порт нужен, чтобы подключить клавиатуру к конвертеру. Чтобы через конвертер подключить клавиатуру к обычному терминальному порту ДВК - нужно подключить этот порт ДВК к другому COM-порту PC и в эмуляторе соединить этот порт с портом [ASCII] конвертера.


В РУС переходит, а обратно в ЛАТ нет.Да, точно - EDIK код LAT не отрабатывает, поэтому для переключения в LAT надо нажать на клавиатуре <Ctrl><N>.

Как вообще с вводом <Ctrl> кодов - <Ctrl><C> работает ?

При нажатии <КМП> загорается лампочка КОМПОЗ ?

А кнопка <ФКС> работает в точности как клавиша <CapsLock> на PC ?

А что насчёт автоповтора..
Если в редакторе зажать букву или стрелку - работает ?

---------- Post added at 20:51 ---------- Previous post was at 20:45 ----------

При нажатом <ВР> изменяется регистр вводимых символов ?

---------- Post added at 20:56 ---------- Previous post was at 20:51 ----------

Код LAT ( 017 ) напрочь убивает вывод символов в RT-11, поэтому ( как теперь вспомнил ) использовать клавишу <RUS/LAT> на реальной МС 7004 было невозможно.

Возможно, есть смысл превратить клавишу RUS/LAT в клавишу RUS, чтобы она всегда генерила только код 016 ..

---------- Post added at 21:13 ---------- Previous post was at 20:56 ----------

При работе с КЦГД кнопка <СТОП КАДР> поочерёдно шлёт коды Ctrl/S / Ctrl/Q для приостановки/продолжения вывода на экран.

Можно добавить такую функцию в конвертер, отражая текущий статус задержки вывода на терминал при помощи лампочки СТОП КАДР.

Кнопку <УСТ РЕЖИМА> можно задействовать для запрещения/разрешения писка клавиатуры при выводе кода 007.

MiX
12.01.2014, 22:37
Как вообще с вводом <Ctrl> кодов - <Ctrl><C> работает ?

Нет.


При нажатии <КМП> загорается лампочка КОМПОЗ ?

Да.


А кнопка <ФКС> работает в точности как клавиша <CapsLock> на PC ?

Да.


А что насчёт автоповтора..
Если в редакторе зажать букву или стрелку - работает ?

Повторяет цифры/буквы и забой удаляет. На ДВК если забой зажать то он повторяет последний символ.


При нажатом <ВР> изменяется регистр вводимых символов ?

Да

Patron
12.01.2014, 22:58
<Ctrl><C> работает ? - Нет.Т.е. если в командной строке RT-11 зажать <СУ> и несколько раз нажать клавишу <C>, то вместо ^C введётся просто несколько букв 'c' ?


На ДВК если забой зажать то он повторяет последний символ.В смысле - это такой глюк у прошивки КЦГД ?

А если вывести в командной строке кучу пробелов и зажимать стрелки <Влево> / <Вправо>, то курсор ездит туда-сюда ?

MiX
12.01.2014, 23:15
Т.е. если в командной строке RT-11 зажать <СУ> и несколько раз нажать клавишу <C>, то вместо ^C введётся просто несколько букв 'c' ?

Вообще ничего, и после этого не вводится ни один символ. Приходится перезапускать.



В смысле - это такой глюк у прошивки КЦГД ?

Забой-то работает, только по одному нажатию. На счет прошивки не знаю, у меня 181.



А если вывести в командной строке кучу пробелов и зажимать стрелки <Влево> / <Вправо>, то курсор ездит туда-сюда ?

Да, и когда "упирается" клавиатура пищит.

Patron
12.01.2014, 23:31
Вообще ничего, и после этого не вводится ни один символ. Приходится перезапускать.Похоже на <Ctrl/S> ( тогда разблокировать вывод можно по <Ctrl/Q> ).

Для проверки можно выключить SL и понажимать разные Ctrl-символы, которые ничего не делают - на экране должно получиться вроде такого:



.SE SL OFF

.^A^B^E^T^D^G

MiX
12.01.2014, 23:43
Похоже на <Ctrl/S> ( тогда разблокировать вывод можно по <Ctrl/Q> ).

На PCной клавиатуре?


Для проверки можно выключить SL и понажимать разные Ctrl-символы, которые ничего не делают - на экране должно получиться вроде такого:



.SE SL OFF

.^A^B^E^T^D^G

Да получается.

Patron
12.01.2014, 23:50
На PCной клавиатуре?На клавиатуре МС 7004 есть клавиша <C/S>. Если нажать её при нажатой клавише <СУ> - RT-11 заблокирует вывод на терминал до нажатия комбинации клавиш <СУ><Я/Q> на клавиатуре МС 7004 или комбинации клавиш <Ctrl><Q/Й> на клавиатуре PC.

Чтобы проверить работу Ctrl/C на клавиатуре МС 7004 - нужно зажать клавишу <СУ> и нажать клавишу <Ц/C>.

MiX
13.01.2014, 00:09
На клавиатуре МС 7004 есть клавиша <C/S>. Если нажать её при нажатой клавише <СУ> - RT-11 заблокирует вывод на терминал до нажатия комбинации клавиш <СУ><Я/Q> на клавиатуре МС 7004 или комбинации клавиш <Ctrl><Q/Й> на клавиатуре PC.

Работает, только я не знал про СУ+Я/Q


Чтобы проверить работу Ctrl/C на клавиатуре МС 7004 - нужно зажать клавишу <СУ> и нажать клавишу <Ц/C>.

Правильно только на МС 7004 нет никаких Ctrl по этому я и спросил на какой клавиатуре.

Патрон спасибо тебе за конвертер, я :v2_dizzy_sleep2:

Patron
13.01.2014, 00:21
Работает, только я не знал про СУ+Я/QКод Ctrl/S выдаёт на МС 7004 та самая клавиша, которая на PC выдаёт Ctrl/C, поэтому случайно нажав Ctrl/S вместо Ctrl/C - вполне можно подумать, что машина зависла.

Надо будет сделать индикацию режима Ctrl/S на лампочке СТОП КАДР, чтобы легче было обнаруживать такие ошибки.


на МС 7004 нет никаких Ctrl по этому я и спросил на какой клавиатуре.Попеременно работать с двумя клавиатурами, имеющими разные раскладки и разные подписи на управляющих клавишах - сюжет для фильма о крутых хакерах.

hobot
13.01.2014, 03:32
Тестовая сборка "эмулятора ДВК": DVK_Emulator_12.01.14_18-32 (http://emulator.pdp-11.org.ru/DVK/distr/DVK_Emulator_12.01.14_18-32.rar)

Только я настроил все шрифты, цвета и образы! )
Всё сначала и так каждый раз! Patron, вы предлагали сделать мне
свой конфиг, но какой смысл если еxe в него актуальных обновлений
не вписывает? То есть 10 строк в файла конфигурации каждой новой сборки
приходится заного каждый раз писать! Но это конечно не сопоставимо с
написанием кода эмулятора и устройств, так что всё равно спасибо! )
(огромное спасибо!)

Есть ещё вопрос по шрифтам, но я не знаю как корректно сформулировать.
Суть в том, что на БУКЕ у меня откуда то (видимо с какой-то программой)
появился в системе шрифт с правильным нулём и более того этот шрифт
позволяет делать окно рабочее на вкладке VT52 огромным (удобно читаемым).

Но на десктопе у меня этого шрифта нет ( Шрифт по умолчанию, который масштабируется на весь экран там нолики не правильные (раздражает просто!), а там где правильные нолики в эмуляторе нельзя выбрать достаточно крупно, что бы окно было большим. Как победить?

---------- Post added at 03:32 ---------- Previous post was at 03:30 ----------


Попеременно работать с двумя клавиатурами, имеющими разные раскладки и разные подписи на управляющих клавишах - сюжет для фильма о крутых хакерах.
Это кажется было у китайцев про двух мастеров гун-фу ))) Один дополнял другого ))) В итоге они замесили общего врага - как-то так )))

hobot
13.01.2014, 07:24
MiX, среди прочих хелп-текстов нашёл кратенькую шпору такую

СТАНДАРТНЫЕ КЛАВИШИ УПРАВЛЕНИЯ С ТЕРМИНАЛА

----------------------------------------------------------------

Клавиша Описание

----------------------------------------------------------------

СУ/S Приостановление вывода на терминал;

СУ/Q Возобновление вывода на терминал после предыдущей
команды;

СУ/D Прекращение любого вывода на терминал, повторное
нажатие - возобновление;

СУ/C Прерывание выполнения текущей программы;

СУ/F Передача управления основной программе;

СУ/B Передача управления фоновой программе;

СУ/X Передача управления системной программе;

СУ/U Очистка командной строки;

СУ/W Повторный вывод символов текущей строки, если
используется редактор командной строки;

СУ/R Повторный вывод символов текущей строки после СУ/W;

СУ/Z Признак конца файла, вводимого с терминала;

ЗБ Удаление последнего введенного символа.

----------------------------------------------------------------


(тут конечно по теме!)

Кстати говоря, по поводу УПР\S УПР\Q сильно выручала\выручает когда например на УК-НЦ прогоняешь исходник транслятором PASCAL.SAV, в той части где символом ¬ помечены ошибки, можно приостановить вывод листинга, попытаться понять\запомнить место ошибки и продолжить вывод листинга на экран.

И ещё я точно помню\знаю, что у меня в 90-х на УК-НЦшке был PASCAL.SAV, который в шапке писал, что он 8-битный и пищал на каждый символ ¬ при условии трансляции с выводом на терминал конечно-же ) Поэтому УПР\S удобно было жать по писку.

(!)Да УПР = СУ = левый Ctrl - вроде так? поправьте если ошибся я (!)

Patron
13.01.2014, 15:02
вы предлагали сделать мне свой конфиг, но какой смысл если еxe в него актуальных обновлений не вписывает?Если у существующего объекта появились новые параметры - они вписываются автоматически, но если в каком-то из модулей появились новые объекты, то их создание и связывание с другими создаваемыми объектами автоматизировать невозможно.

Это всё равно, что требовать от новой версии Бэйсика, чтобы при загрузке написанной пользователем программы - в неё автоматически добавлялись новые операторы, появившиеся в этой новой версии Бэйсика.

hobot
13.01.2014, 15:08
Patron, это я понял и смирился, в конце концов проще обновить целиком и быстренько пробежаться с заготовленной шпорой по привычным настройкам, вот со шрифтами момент, но тут конечно то же не совсем к вам вопрос, а общесистемный наверное.

Да! Тестовую версию пока на сайт не заливал там предыдущая. Первая в НГ которая была.
То есть без конвертера клавиатуры.

Vamos
13.01.2014, 16:17
Patron, наверное hobot хочет чтобы было как в языке Си, в файле конфига была строка типа #include userconfig а пользователь мог менять свои настройки в файле userconfig.cfg . Ведь предыдущие параматры и объекты не должны меняться, добавляются только новые. Или я что-то не понял.

hobot
13.01.2014, 17:03
userconfig.cfg
Штука в том, что Patron прав, автоматизировать не получится.
Например цвет содержится в файле terminal.ini
Про шрифты информация в разделе [vt52] внутри default.cfg там же где-то и
размер ОЗУ и dsk и настройка загрузки. Вот в принципе, остальное он автоматом сохраняет после первого запуска (ну размер окон и шрифтов).

Но в целом я согласен хоть каждый день всё от руки заного писать, главное
что-бы проект обновлялся ! )

Patron
13.01.2014, 17:04
наверное hobot хочет чтобы было как в языке Си, в файле конфига была строка типа #include userconfig а пользователь мог менять свои настройки в файле userconfig.cfg . Ведь предыдущие параматры и объекты не должны меняться, добавляются только новые. Или я что-то не понял.Проблема выглядит так - добавил ( например ) человек подключение своего DSK-образа в ini-секцию эмулятора какого-то диска в файле конфигурации default.cfg, а в новом релизе в default.cfg этого нет - вот и приходится каждый раз снова редактировать default.cfg.

При всей кажущейся простоте - полноценная автоматизация "слияния конфигов" весьма непроста, а неполноценная приведёт к появлению неработоспособных конфигов, найти "неисправность" в которых гораздо сложнее, чем сразу сделать всё вручную.

Patron
13.01.2014, 19:36
Тестовая сборка "эмулятора ДВК": DVK_Emulator_13.01.14_19-19

Изменения:

1. Теперь при подключении к конвертеру MS7004_Converter клавиатура МС 7004 должна пищать.

2. Теперь клавиша <РУС/ЛАТ> генерит только коды RUS ( 016 ).

3. Теперь индикатор СТОП КАДР отражает состояние блокировки вывода RT-11 управляющими кодами Ctrl/S и Ctrl/Q, а клавиша <СТОП КАДР> посылает коды Ctrl/Q при включённом индикаторе СТОП КАДР и коды Ctrl/S при выключенном.

Индикатор СТОП КАДР также выключается при любом выводе на терминал, происходящем спустя более 350 мс после его включения.

4. В объект MS7004_Converter добавлены базовые параметры, задающие ANSI-строки, отправляемые конвертером в терминальный порт ДВК при нажатии соответствующих клавиш на клавиатуре МС 7004. Значения по умолчанию для данных параметров находятся в файле MS7004_Converter.ini:



[Main]
;;
;; ANSI-строки, передаваемые конвертером в терминальный порт
;; при нажатии указанных клавиш на подключенной к конвертеру
;; клавиатуре МС 7004.
;;

;;------------------------------------------------------------
;;
;; Назначенные здесь строки лучше заменить на более полезные.
;;
ANSI_STR_FOR_KEY[Preryw] = "preryw "
ANSI_STR_FOR_KEY[Prodol] = "prodolv "
ANSI_STR_FOR_KEY[Otmen] = "otmen "
ANSI_STR_FOR_KEY[OsnKadr]= "osnown.kadr "
ANSI_STR_FOR_KEY[Wyhod] = "wyhod "

;;------------------------------------------------------------

ANSI_STR_FOR_KEY[F11] = "\033"
ANSI_STR_FOR_KEY[F12] = "\010"
ANSI_STR_FOR_KEY[F13] = "\012"
ANSI_STR_FOR_KEY[DopWar] = "dop.wariant "

;;------------------------------------------------------------
;;
;; Назначенные здесь строки лучше заменить на более полезные.
;;
ANSI_STR_FOR_KEY[Pm] = "pm "
ANSI_STR_FOR_KEY[Isp] = "isp "

;;------------------------------------------------------------
;;
;; Назначенные здесь строки лучше заменить на более полезные.
;;
ANSI_STR_FOR_KEY[F17] = "F17 "
ANSI_STR_FOR_KEY[F18] = "F18 "
ANSI_STR_FOR_KEY[F19] = "F19 "
ANSI_STR_FOR_KEY[F20] = "F20 "

;;------------------------------------------------------------
;;
;; Клавиши над стрелками генерят коды Ruslo3
;;
ANSI_STR_FOR_KEY[Nt] = "\033c"
ANSI_STR_FOR_KEY[Wst] = "\033d"
ANSI_STR_FOR_KEY[Udal] = "\033e"
ANSI_STR_FOR_KEY[Wybr] = "\033f"
ANSI_STR_FOR_KEY[PredKadr]="\033g"
ANSI_STR_FOR_KEY[SledKadr]="\033h"

;;------------------------------------------------------------
;;
;; ЗБ
;;
ANSI_STR_FOR_KEY[Zb] = "\177"

;;------------------------------------------------------------
;;
;; ВК
;;
ANSI_STR_FOR_KEY[Wk] = "\015"

;;------------------------------------------------------------
;;
;; Пустая клавиша перед клавишей ЗБ
;;
ANSI_STR_FOR_KEY[Pust] = "\012"

;;------------------------------------------------------------
;;
;; Клавиша [_] перед правой клавишей ВР
;; На эту клавишу можно назначить код LAT = "\017"
;;
ANSI_STR_FOR_KEY[_] = "_"

;;------------------------------------------------------------

ANSI_STR_FOR_KEY[{] = "{"
ANSI_STR_FOR_KEY[}] = "}"
ANSI_STR_FOR_KEY[~] = "_"

;;------------------------------------------------------------

MiX
13.01.2014, 21:28
1.Работает.
2.Работает.
3.Работает,только-

Индикатор СТОП КАДР также выключается при любом выводе на терминал, происходящем спустя более 350 мс после его включения.

Как что-либо вывести на терминал если клавиатура заблокирована?

Patron
13.01.2014, 21:41
Как что-либо вывести на терминал если клавиатура заблокирована?Вывод блокируется только в RT-11. Если программа выводит символы не через RT-11, а прямо в порт - ничего не блокируется.

Можно на ДВК выйти в [Пульт] и нажать на МС 7004 <СТОП КАДР> - лампочка загорится, но вывод не заблокируется. Как только что-то будет выведено на экран спустя более 350 мс ( можно просто нажать ВК ) - лампочка погаснет.

Кроме того, в RT-11 v05.04 ( и младше ) - двойное нажатие Ctrl/C снимает блокировку вывода.

MiX
13.01.2014, 22:00
Можно на ДВК выйти в [Пульт] и нажать на МС 7004 <СТОП КАДР> - лампочка загорится, но вывод не заблокируется. Как только что-то будет выведено на экран спустя более 350 мс ( можно просто нажать ВК ) - лампочка погаснет.

Работает, только я время не замерял.


Кроме того, в RT-11 v05.04 ( и младше ) - двойное нажатие Ctrl/C снимает блокировку вывода.

Вот этим я всегда и пользовался, поэтому я и не знал про СУ+Я/Q.

Vamos
14.01.2014, 01:17
При всей кажущейся простоте - полноценная автоматизация "слияния конфигов" весьма непроста, а неполноценная приведёт к появлению неработоспособных конфигов, найти "неисправность" в которых гораздо сложнее, чем сразу сделать всё вручную.
Я и не утверждал что это просто, а предложил один из вариантов решения. Есть еще вариант: в ехе файле эмулятора добавить обработчик строк, который будет сравнивать наличие параметра в файле пользователя с cfg, ini файлами эмулятора и переписывать значения при совпадении. На мой взгляд это стандартные решения используемые во многих программах, типа "загрузить/сохранить личные настройки". И должен заметить что в этих прогах это все работает без замечаний даже при смене версии прог.
Мое мнение, что нужно попробовать, будут проблемы - всегда можно отказаться.

Patron
14.01.2014, 13:36
Есть еще вариант: в ехе файле эмулятора добавить обработчик строк, который будет сравнивать наличие параметра в файле пользователя с cfg, ini файлами эмулятора и переписывать значения при совпадении.Все возможные алгоритмы "слияния" конфигов никак не пересекаются с другими функциями эмулятора, поэтому их вполне можно реализовать отдельной утилитой.

Сравнивать текстовые файлы гораздо удобнее с использованием регулярных выражений ( я для этого использую Perl ), только при написании "объединителя" не надо забывать, что логическая структура конфига мало связана с "физической" - строки в двух объединяемых файлах cfg или ini могут располагаться в разном порядке, но иметь один смысл.

hobot
14.01.2014, 14:03
Vamos,
Patron, извиняюсь, я даже боюсь в эту дискуссию встревать, но читаю и упоминание "сторонняя утилита", "логическая структура", "физическая" - это пока ещё весьма отдалённо, но уже начинает напоминать реестр ) И программу
по его редактированию и проверки )


Patron, вот знаете что бы 100% хотелось бы избежать! Привязки обновления к сети, или обновления прямо из эмулятора по кнопке из сети.
По крайней мере возможность обновления через скачивание просто нового
архива и исправление ручками (и зачем я вообще начал жаловаться? то есть
я не жаловался, а просто описал ситуацию).

У меня вот только одно предложение, можно ли продумать так, что бы все настройки были в одном файле - а не раскиданы по куче, а уже из него конфиги типа "по умолчанию", "хобот_персональный", "стакан" и др. брали
то что им надо и запускался бы pdp11.exe?

И ещё, например некоторые установки по умолчанию можно бы сразу переменить: 1 - давайте сразу 60кб ОЗУ - это же эмулятор зачем отказывать
себе в лишней памяти если тут ничего и паять то не надо?
2 - сглаживание экранных шрифтов отключение (по умолчанию = 0) - может лучше врубить? ведь мерцание раздражает и его всё равно приходится вырубать каждый раз
3 - можно всё таки один какой-то масштабируемый шрифт прикрутить с правильным 0
4 - можно с закладки MY вот сами дисководики всё таки прикрутить куда
то что бы всегда были на виду (и мерцающую кнопочку!) по умолчанию!!!
5 - а далее учитывая уже все наработки название каждого конфиг. файла,
который из общего как-бы составлен будет сам за себя говорить. Если это
HX-сервер - так это он, если ДВК - то машинка ДВК.
Загрузку можно сделать так - то устройство с которого система загружалась
последний раз автоматом пишется для следующего запуска в текущем конфиге,
если вдруг устройство демонтировано (отсутствует)... ух как всё сложно то и вариантов много.
А ведь, Patron, вы надеюсь, планируете и дальше какие-то железячки эмулировать (ну то есть хотя бы в теории есть шанс модульной эмуляции дорасти до конфигурации КВАНТА ? )


............. добавил .........................
Во! Что если эмулятор всегда будет просто стартовать и автоматом выдавать окно для
выбора стартового конфига??? ) (ИМХО:может так же отказаться от кириллицы в названиях
внутри папки эмулятора - во избежании...)

Vamos
14.01.2014, 18:58
что логическая структура конфига мало связана с "физической" - строки в двух объединяемых файлах cfg или ini могут располагаться в разном порядке, но иметь один смысл.
Порядок строк имеет значение?

И наверное пора сделать файл справки по параметрам конфигурации, искать эту информацию по форуму не очень удобно.

Patron
14.01.2014, 19:25
Порядок строк имеет значение?Все строки раздела должны находиться после названия раздела и до названия следующего раздела. Другой связи между строками нет.


И наверное пора сделать файл справки по параметрам конфигурацииОбщие сведения о файлах конфигурации находятся здесь: Формат файлов конфигурации (http://zx.pk.ru/showthread.php?postid=480073),
а параметры объектов описаны в описаниях релизов:

DVK_Emulator_30.12.13_17-00 (http://zx.pk.ru/showthread.php?postid=657336)
DVK_Emulator_19.12.13_00-19 (http://zx.pk.ru/showthread.php?postid=653816)
DVK_Emulator_07.05.13_16-37 (http://zx.pk.ru/showthread.php?postid=599225)
DVK_Emulator_23.04.13_12-22 (http://zx.pk.ru/showthread.php?postid=595846)
DVK_Emulator_04.04.13_12-37 (http://zx.pk.ru/showthread.php?postid=588958)
DVK_Emulator_18.02.13_19-37 (http://zx.pk.ru/showthread.php?postid=577479)
DVK_Emulator_13.02.13_23-42 (http://zx.pk.ru/showthread.php?postid=576043)
DVK_Emulator_17.01.13_15-39 (http://zx.pk.ru/showthread.php?postid=568590)
DVK_Emulator_04.01.13_18-24 (http://zx.pk.ru/showthread.php?postid=564482)
DVK_Emulator_27.12.12_18-37 (http://zx.pk.ru/showthread.php?postid=561778)
DVK_Emulator_25.11.12_13-30 (http://zx.pk.ru/showthread.php?postid=554855)
DVK_Emulator_20.11.12_17-44 (http://zx.pk.ru/showthread.php?postid=553924)
DVK_Emulator_05.11.12_16-19 (http://zx.pk.ru/showthread.php?postid=546885)
DVK_Emulator_20.10.12_18-53 (http://zx.pk.ru/showthread.php?postid=546885)
DVK_Emulator_27.09.12_17-15 (http://zx.pk.ru/showthread.php?postid=543170)
DVK_Emulator_15.03.12_15-10 (http://zx.pk.ru/showthread.php?postid=480910)
DVK_Emulator_04.03.12_18-07 (http://zx.pk.ru/showthread.php?postid=475407)

MiX
21.01.2014, 20:13
Patron, Я подключил ДВК к терминалу и при загрузке HXsys57.DSK
он мне выдал вот что http://zx.pk.ru/attachment.php?attachmentid=45178&stc=1&d=1390324220

Что-бы это могло быть?
HXsys54 загружается нормально.

Patron
21.01.2014, 20:33
Что-бы это могло быть?В образе диска драйвер HX.SYS очень старой версии. Похоже, что он использует старую версию протокола HX, которую сервер уже не обслуживает.

Помочь делу можно, скопировав драйвер HX.SYS из рабочего образа. Но при этом надо подцепить образ HXsys57.DSK в эмулятор ДВК, назначить его устройству имя DK и после копирования нового драйвера дать команду COPY/BOOT:



.COPY/BOOT:HX RT11SB DK:
Если пройдёт успешно - дело сделано, а если скажет про конфликт опций генерации - скопированный драйвер надо будет настроить для совместимости с целевым монитором RT11SB.SYS

MiX
21.01.2014, 22:07
Спасибо попробую...

Сейчас добавил драйвер VM.sys сделал инициализацию и теперь появился виртуальный диск. Вот думаю как его прописать STARTS.COMе чтоб он уже был проинициализирован и копировал в себя HX0. То-есть использовался как свап.

Patron
21.01.2014, 22:48
Сейчас добавил драйвер VM.sys сделал инициализацию и теперь появился виртуальный диск. Вот думаю как его прописать STARTS.COMе чтоб он уже был проинициализирован и копировал в себя HX0. То-есть использовался как свап.Ничто не мешает загрузиться с VM.

Можно скопировать системные файлы на VM, сделать COPY/BOOT VM:RT11SJ VM:, а после этого можно уже и BOOT VM:

Когда VM готов к загрузке - можно сделать его "твёрдую копию" на какой-нибудь пустой образ, подключенный к приводу HX1:



COPY/DEV VM:/END:nn HX1:


Где nn - номер последнего блока, занятого файлами.

После этого в STARTS.COM можно написать:



COPY/DEV HX1:/END:nn VM:
BOOT VM:


---------- Post added at 21:48 ---------- Previous post was at 21:43 ----------

Правда, обсуждать это лучше здесь: Загрузка RT-11 через порт системного терминала (http://zx.pk.ru/showthread.php?t=20095).

Patron
11.02.2014, 14:35
Обновилась текущая сборка эмулятора терминала типа VT52: VT52_09.02.14_14-35

Изменения:

1. В комплект поставки включена новая версия v3.1 драйвера HX.SYS ( подробнее ЗДЕСЬ (http://zx.pk.ru/showthread.php?postid=577658) ).

2. Теперь в ini-файле эмулятора запоминаются последние 15 открытых cfg-файлов. В ini-файл эмулятора добавлен параметр nRecentConfigsInMenu, задающий количество имён последних открытых cfg-файлов, показываемых в меню "Файл" для возможности быстрой смены загруженной конфигурации. Допустимые значения от 0 ( вообще не показывать последние открытые файлы ) до 15 ( показывать все запомненные файлы ), значение по-умолчанию 7.

Если какая-то позиция в показываемом списке последних открытых файлов не устраивает - её можно удалить, использовав Ctrl/Click.

...

MiX
11.02.2014, 19:18
Спасибо Патрон!

Предлагаю в следующем релизе поместить в отдельную папку (в папке VT52) с датой релиза файлы конфигурации и файлы образов. Так-как при разархивации в папку предыдущего релиза приходится всё заново настраивать. Например Com.cfg и Com4.cfg в новом релизе настроены на один и тот-же порт.

Patron
11.02.2014, 19:35
Например Com.cfg и Com4.cfg в новом релизе настроены на один и тот-же порт.Они во всех релизах настроены на один и тот же порт.

В COM_4.cfg есть дополнительные лампочки и кнопки, показывающие состояние сигналов COM-порта и позволяющие ( при возможности ) их менять.

MiX
11.02.2014, 19:54
Отлично,а можно их добавить в HX_com.cfg?

MiX
11.02.2014, 23:13
Ладно Патрон конфиг не надо делать, сам сделал.

Вот:


Правда прикольно грузится :) , но ничего я думаю конфиг доделаю.

MiX
11.02.2014, 23:38
Конфиг доделал. Закомментировал ;ComPort <==> VT52 и всё пошло.

Patron
12.02.2014, 03:12
Конфиг доделал.Супер !

bigral
13.02.2014, 15:26
К стати а для UKNC можно выпустить новую сборку? Или еще круче слить UKNC HX server сюда же чтоб был 1 продукт? (я молчу уже про эмуль двк, его тоже можно было бы добавить сюда же да?)

hobot
13.02.2014, 17:18
К стати а для UKNC можно выпустить новую сборку? Или еще круче слить UKNC HX server сюда же чтоб был 1 продукт? (я молчу уже про эмуль двк, его тоже можно было бы добавить сюда же да?)
Я как то в обратном порядке воспринимаю то есть для меня эмулятор ДВК первичен, а остальное "побочки" ) Если сливать то туда к нему - Эмулятор ДВК + расширенный набор конфигов + несколько EXE-шек для запуска )))

---------- Post added at 17:17 ---------- Previous post was at 16:43 ----------

Да и к тому же для УК-НЦ - же два варианта
1 - для стык2
2 - для СА !!!
Драйвер пользователь может и сам обновить до 3.1 версии???

---------- Post added at 17:18 ---------- Previous post was at 17:17 ----------

К тому же УК-НЦ шные вроде отлажены-работают и в том виде\сборе ???

MiX
13.02.2014, 17:21
ДВК эмулятор первичен но надо не забывать что надо эмулировать ДВК+VT52 через ком порт на одном компьютере. Поэтому надо 2 экзешника.

Patron
13.02.2014, 19:19
К стати а для UKNC можно выпустить новую сборку?Со следующим релизом терминала так и сделаю.

MiX
14.02.2014, 00:29
Сделал тестовый конфиг для PDP11 где PDP11 и VT52 работают на одном ядре но с двумя разными сом портами. Получается что достаточно одного экзешника.

Пока что HX не грузится, буду разбираться.

MiX
14.02.2014, 13:16
При попытки загрузится с НХ происходит следующее: Запускаем PDP11, нажимаем сброс, нажимаем BOOT HX0 -пультовая строка молчит. Но если нажать кнопку выбора образа НХ и перейти на папку VT52 то НХ сразу загружается не успев выбрать другой образ.

Patron
14.02.2014, 13:52
При попыткe загрузится с НХ происходит следующее: Запускаем PDP11, нажимаем сброс, нажимаем BOOT HX0 -пультовая строка молчит. Но если нажать кнопку выбора образа НХ и перейти на папку VT52 то НХ сразу загружается не успев выбрать другой образ.Это в какой конфигурации ?

MiX
14.02.2014, 21:25
В тестовой конечно.

MiX
15.02.2014, 00:11
Долго не мог понять почему HX не грузился. А ларчик то просто открывался. Вот почему загрузка шла только когда я отрывал папку VT52.
Оказывается для полного слияния PDP11+VT52 одного конфига мало. Надо перебрасывать файлы UKNC-style Loader.odt и Boot_RT-11_from_HX0.bin, ну и соответственно HXsys54.DSK.

P.S А лучше всё перебросить (ну кроме VT52.EXE конечно) чтоб потом не наступать на те же грабли.