А не проще тупо написать прогу для виндовса или униха и подключить терминал к PC? :)
Нет, на миллион делить нельзя - для большинства процессоров получится 0 или 1..
---------- Post added at 20:07 ---------- Previous post was at 20:05 ----------
Предложенная утилита измеряет промежутки времении с разрешением, равным суммарной продолжительности трёх команд процессора.
Это очень точные измерения.
UKNCBTL тоже засыпает, а потом, при следующем просыпании, также все разгребает. SJ мониторы бывают разные - с поддержкой таймера и без, у них различаются обработчики прерываний клавиатуры. По этому поводу даже писали, что на МС1201.02 на процессоре 1801ВМ2 при активном использовании инструкций FIS и нажатии на клавиши в это время часто программа вываливалась в пультовый отладчик, но эта проблема наблюдается только в SJ-мониторе без поддержки таймера, в мониторе с поддержкой таймера эта проблема отсутствует.
Кстати на реальной УКНЦ также проблемы нет. Зажал стрелку вниз и в режиме автоповтора клавиши происходило пролистывание страниц.
Вот вариант, выводящий результаты не в миллисекундах, а в сотнях микросекунд:
MCPS.SAV v1.1 - CHECK TERMINAL INPUT SPEED
Код:.RU MCPS
MCPS - CHECK TERMINAL INPUT SPEED - V1.1
CPU SPEED: 50
TERMINAL ID : <033> .. 137 ms*10 .. '/' .. 77 ms*10 .. 'Z'
AUTOANSWER : <003> .. 144 ms*10 .. <003>
PRESS EXTENDED KEYS FOR TEST OR OTHER FOR EXIT..
MULTIBYTE KEY: <033> .. 153 ms*10 .. 'A'
MULTIBYTE KEY: <033> .. 161 ms*10 .. 'B'
MULTIBYTE KEY: <033> .. 153 ms*10 .. '?' .. 73 ms*10 .. 'p'
MULTIBYTE KEY: <033> .. 83 ms*10 .. '?' .. 73 ms*10 .. 'n'
MULTIBYTE KEY: <033> .. 161 ms*10 .. '?' .. 71 ms*10 .. 'M'
PROGRAM COMPLETED
Совершенно верно. Обработчик прерывания клавиатуры у SJ-монитора с поддержкой таймера и FB-монитора одинаковый. Особняком стоит SJ-монитор без поддержки таймера. Собственно проблема эта решалась перестановкой местами двух команд в RMON, эта проблема и ее решение были описаны в одном из журналов МПСС.
Поищу в сканах журналов. Но эта проблема была в процедуре завершения прерывания.
Суть ее в том, что смотрелось во время завершения два условия. Один аргумент находился вроде в регистрах, а второй в теле программы, адрес смотрелся через стек. Так вот обработчик FIS написан таким образом, что если при его вызове прерывания были разрешены, то он разрешал аппаратные прерывания и при обработке FIS. Естественно при прерывании в стеке сохранялся адрес, больший 160000. Возврат по RTI/RTT в 1801ВМ2 происходит нормально, это предусмотрено. Но вот процедура завершения лезет соответственно по адресу большему чем 160000 в USER-режиме, ну и соответственно получает TRAP4.
А решение проблемы в том, чтобы сначала проверялось условие в регистре, а потом в памяти программы.
Описана в журнале № 5 за 1989 год, страница 92. Называется "Ошибка в операционной системе для ДВК3".
А вот собственно и кусок кода:
Скрытый текст
В SJ-мониторе без поддержки таймера используется одна и та же процедура завершения как для обработчика EMT, так и для обработчика прерываний клавиатуры. Естественно сначала проверяется не было ли у нас EMT 375, для обработчика клавиатуры это бессмысленно, поэтому если прервалось при эмуляции FIS, то попадаем в отсутствующую память (выше 160000).
Проблема решалась тем, что сначала проверялось ASL R2/BEQ NOPOP, а затем CMPB #374,-2(R3)/BLOS NOPOP.