Нет, на миллион делить нельзя - для большинства процессоров получится 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
Последний раз редактировалось Patron; 03.03.2012 в 21:23.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Совершенно верно. Обработчик прерывания клавиатуры у 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.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)