Вот и проверь. Разговор идет не о 10 нажатых клавишах, а о клавише, которая при своем нажатии посылает несколько кодов.
Проверил, приходят с интервалом 0.3мс. Соответственно при выключенном SL эффект проявляется в полной мере. Если на реальной машине прямо выводится каждый нечетный символ, а четные потом в обратном порядке, то в EmuStudio прямо выводится только первый символ, а все остальные в обратном порядке.
Это время измеряется в программе Patron-а. Если на клавишу назначена строка символов, то ПП посылает их друг за другом. Все зависит в данном случае от быстродействия программы в ПП. В UKNCBTL, судя по измерениям этой программы, ЦП работает с такой же скорость, как и на реале. А так в UKNCBTL команды в ПП выполняются в 1,28 раз медленнее чем в ЦП, то и получается 1мс. Но в ПП в ПЗУ команды выполняются быстрее, чем в ОЗУ ЦП, поэтому на реале 0.6мс.
Точность измерения пропорциональна параметру CPU SPEED, который измеряется первым.
Именно на это число делится значение циклического счётчика.
Когда CPU SPEED == 5 - это означает, что точность измерения ~ 20% ( 1/5 ).
Когда у меня в эмуляторе получается CPU SPEED == 4, то задержка, измеренная при CPU SPEED == 3 как 1.6 ms - превращается в 1.2 ms
Хе.
Код:RSX-11M-PLUS V4.6 BL87 1024.KW System:"KOPOBA"
>RED DU:=SY:
>RED DU:=LB:
>RED DU:=SP:
>MOU DU0:"RSX11MPBL87"
>@DU:[1,2]STARTUP
>; PLEASE NOTE
>;
>; If you have not yet read the system release notes, please do so
>; now before attempting to perform a SYSGEN or to utilize the new
>; features of this system.
>;
>;
>* Please enter time and date (Default:04-MAR-2012 15:25) [S]: ^Z
>@ <EOF>
>LOA MY:/VEC
>CON ONL ALL
>ALL MY
ALL -- MY0: Now allocated
>MOU MY:/FOR
>INI MY:TEST
Searching for bad block descriptor file
INI -- Failed to read bad block file
>DMO MY:
15:25:33 *** MY0: -- Dismount complete
DMO -- TT0: dismounted from MY0: *** Final dismount initiated ***
>MOU MY:TEST
>DEV /MA
DU0: Public Mounted Loaded Label=RSX11MPBL87 Type=RA60
MU0: Loaded Type=TU81
MY0: TT0: - Private Mounted Loaded Label=TEST Type=UNKN
MY1: Loaded Type=UNKN
MY2: Loaded Type=UNKN
MY3: Loaded Type=UNKN
>PIP MY:/FR
MY0: has 1573. blocks free, 27. blocks used out of 1600.
Largest contiguous space = 798. blocks
92. file headers are free, 5. headers used out of 97.
>
Относительно перехода процессора 11/83 в режим KERNEL и обратно у меня сложилось следующее впечатление:
1. При любом запуске блока прерываний - устанавливается режим KERNEL и если предыдущим режимом был режим USER - запоминается значение SP.
2. Если в результате любой последующей команды значение SP становится больше запомненного - устанавливается режим USER.
Если в векторе прерывания PSW задан с очищенными двумя старшими битами - устанавливается режим KERNEL. При этом прошлый режим записывается в два следующих бита ниже старших. SP для каждого режима свой и значение его никакого влияния на режим не оказывает. Адрес/PSW для возврата пишется в стек режима который включается.
---------- Post added at 11:26 ---------- Previous post was at 11:24 ----------
Еще насчет режимов - есть такая ошибка некогда распространенная - при возврате из прерывания установить режим 140000 (пользователь, прошлый - кернел). Почему ошибка - думаю объяснять не нужно :)
Но давно не встречал.
---------- Post added at 11:32 ---------- Previous post was at 11:26 ----------
То есть подводя итоги: режим процессора задается двумя старшими битами PSW, SP в каждом режиме свой.
---------- Post added at 11:35 ---------- Previous post was at 11:32 ----------
Ну и попутно раз пошла такая пьянка...
В усерском режиме команда HALT вызывает трап по 4 или 10 (зависит от проца), на 11/83 по 4.
Команды WAIT, RESET, SPL выполняются как NOP.
В усерском режиме нельзя трогать приоритет процессора и биты режима.
С усерского режима нельзя соскочить через RTI - биты режима установятся снова в USER.
---------- Post added at 11:39 ---------- Previous post was at 11:35 ----------
Ну и еще для информации - вектора прерываний - это не адреса 0-774, а адреса, которые в кернелном режиме отображаются в это место. Но обычно они совпадают.
---------- Post added at 11:59 ---------- Previous post was at 11:39 ----------
Вот собственно для демонстрации :)
Код:.TY TEST.MAC
.TITLE TEST
.MCALL .PRINT,.EXIT
START: MOV #10$,@#14
CLR @#16 ;ПЕРЕХОДИМ В КЕРНЕЛ
BPT
10$: CALL MODE
MOV #20$,@#14
MOV #140000,@#16 ;ПЕРЕХОДИМ В УСЕР
BPT
CALL MODE
.EXIT
20$: CALL MODE
RTI ;ОСТАЕМСЯ В УСЕР
MODE: MOV @#177776,-(SP)
MOV 2(SP),R1
MOV #SPC,R0
MOV PC,R2
CALL $CBOMG
MOV SP,R1
CMP (R1)+,(R1)+
MOV #SSP,R0
MOV PC,R2
CALL $CBOMG
MOV (SP)+,R1
MOV #SPS,R0
MOV PC,R2
CALL $CBOMG
.PRINT #STATE
RETURN
STATE: .ASCII /PC=/
SPC: .ASCII /XXXXXX SP=/
SSP: .ASCII /XXXXXX PS=/
SPS: .ASCIZ /XXXXXX/
.END START
.RU TEST
PC=001020 SP=155204 PS=030000
PC=001050 SP=000774 PS=140000
PC=001042 SP=001000 PS=170010
.
---------- Post added at 13:10 ---------- Previous post was at 11:59 ----------
Никак об эмуляции ВМ3 подумываешь? :)
Теперь информации хватает, недостающие мелочи дотестить можно всегда.
Готовимся к следующему опыту...
Образы двух дискет подготовлены :)
Т.е. сначала получается вектор прерывания, читается из KERNEL-режима значение вектора, а потом в соответствии с новым PSW старые PC и PSW пишутся в стек нового режима?
У ВМ1 и ВМ2 наоборот. Сначала сохраняется в стеке старые PC и PSW, и если не удалось сохранить (из-за четвертого трапа), то до запроса вектора и не доходит.
А можно поподробнее. А то я пока не очень с защищенными режимами.
Т.е. вектора прерываний - это виртуальные адреса 0-477 режима KERNEL?
Много тонкостей в режиме HALT. Есть два источника информации, но как-то противоречиво там написано. Долбаю сейчас прошивку 134, так вот в одном из источников утверждается, что в HALT нельзя использовать EIS (MUL, DIV, ASH, ASHC), но в прошивке употребляются ASH и ASHC.
У ВМ1/ВМ2 нет режима USER. Точнее режим есть, но означает он совсем другое.
Потому сравнение несколько некорректно. Мы обсуждаем режимы MMU. Режим KERNEL соответствует тому, что на ВМ2 называется "USER" :)
Да.
Точнее 0-777 традиционно. Это RT-11 выше 477 не пользует как вектора.
А в принципе вектор можно и выше сделать.
Режим HALT это особая песня скрытая от нас. В большинстве процессоров этот режим если вообще и есть, область его никак не доступна для программ.
По данному поводу я хотел узнать последовательность действий, которые делает KDJ-11 при возникновении аппаратного прерывания. Поэтому я попытался прокрутить логически, что он должен сделать, если старые PC и PSW сохраняются в стеке нового режима, а для этого уже надо получить вектор и прочесть его значение.
Ну на ВМ1 как такового HALT и нету, есть пара битиков в PSW, изменяющая реакцию на прерывания, да и команды START и STEP, да и завязка на ячейки 177674 и 177676, являющиеся копиями PC и PSW при обработке HALT и фатальных ситуаций. Влезть не представляет труда.
На ВМ2 сложнее, все зависит от архитектуры компьютера. На УКНЦ это сущая ерунда. А вот на МС 1201.02 посложнее, но реально.
Про МС 1201.03 и МС 1201.04 ничего пока сказать не могу, может и нереально.
Не совсем. Пока только загрузить систему так, чтобы MY был системным диском после этого. То есть программы все установлены с MY, не фиксированы в памяти и подгружаются динамически.
Для полноценной загрузки нужно написать драйвер загрузки-сохранения и пересобрать соответствующие программы.
---------- Post added at 16:08 ---------- Previous post was at 16:02 ----------
Цель собственно до конца проверить работоспособность на ДВК полноценного RSXа (разумеется сгенерированного без поддержки D-Space и SupMode) - это базовая RSX-11M-PLUS которая грузится с дистрибного кита без каких-либо изменений.
В общем и целом, с MMU несмотря на слухи проблем быть не должно. Мелкие проблемы могут выскочить в другом месте: ВМ3 наиболее близок к 11/23, но у 11/23 есть команда MFPT которая возвращает код модели, здесь же команды такой нет. Отсюда может возникнуть две проблемы:
- проц может определиться как 11/35-подобный - в этом случае система подумает, что 22бита не поддерживается и собственно все (вероятность мала - 22битный 11M загрузился, думаю и M+ загрузится)
- проц может определиться как какой-нибудь 11/70-подобный и соответственно имеющий управляемый таймер, а регистра-то и нету на шине -> таймера тоже нету
В остальном проблем быть не должно.
Ну собственно вот и все.
Никаких проблем не возникло.
И 22bit понял и таймер работает.
Помучили с Andrey_Ak напару с двух терминалов :)
Так что остается только сделать драйверы винта ДВКшного и загрузки-сохранения с/на него.
Код:>PAR
SECPOL 117734 00120000 00100000 SEC POOL
SYSPAR 117670 00220000 00174300 MAIN
117624 00220000 00050700 RO COM !DIR11M!
117440 00270700 00004300 TASK <...LDR>
117240 00275200 00033500 TASK <MCR...>
117040 00330700 00010500 TASK [TKTN ]
116760 00341400 00006000 RO COM !TTEXT !
116674 00347400 00035100 DRIVER (TT:)
116044 00404500 00000500 DRIVER (MY:)
115514 00405200 00004000 DRIVER (DD:)
115234 00411200 00001300 DRIVER (LP:)
115024 00412500 00000100 DRIVER (NL:)
114760 00412600 00001500 DRIVER (RD:)
GEN 114714 00414300 01363500 MAIN
114440 00414300 00040000 RO COM !FCSRES!
061214 00454300 00042000 TASK <RMDT0 >
061140 00516300 00040300 TASK <PART1 >
062054 00564100 00011100 TASK <F11ACP>
061314 00612100 00042500 TASK <HRC...>
114650 00654600 00034000 RO COM +F11ACP+
>ATL
...LDR 117504 SYSPAR 117440 00270700-00275200 Pri - 248. Dpri - 248.
Status: -CHK STP -PMD PRV NSD DFB XHR FXD
TI - CO0: IOC - 0. BIO - 0. Eflg - 000001 000000 PS - 170000
PC - 120474 Regs 0-6 000222 007156 177777 061170 061140 061704 120166
RMDT0 061564 GEN 061214 00454300-00516300 Pri - 225. Dpri - 225.
Status: -CHK WFR -PMD REM PRV MCR CMD DFB XHR
TI - TT0: IOC - 0. BIO - 0. Eflg - 000021 040000 PS - 170010
PC - 125544 Regs 0-6 000000 140313 132422 000000 140355 136610 121172
MCR... 117304 SYSPAR 117240 00275200-00330700 Pri - 160. Dpri - 160.
Status: -CHK STP -PMD PRV CLI NSD DFB XHR FXD
TI - TT1: IOC - 0. BIO - 0. Eflg - 000001 000000 PS - 170000
PC - 122744 Regs 0-6 160021 050712 122022 120772 053320 054070 120402
ATLT1 061704 GEN 061140 00516300-00556600 Pri - 160. Dpri - 160.
Status: -CHK -PMD REM PRV MCR CMD DFB XHR
TI - TT1: IOC - 0. BIO - 0. Eflg - 000001 040000 PS - 170000
PC - 122504 Regs 0-6 000000 131574 050712 140544 140060 000000 001274
F11ACP 114504 GEN 062054 00564100-00575200 Pri - 149. Dpri - 149.
Status: -CHK STP ACP PRV NSD DFB MUT XHR
TI - CO0: IOC - 0. BIO - 0. Eflg - 000002 000001 PS - 170000
PC - 130500 Regs 0-6 116164 123256 000000 116164 062230 061444 120330
HRC... 114300 GEN 061314 00612100-00654600 Pri - 140. Dpri - 140.
Status: STP -PMD PRV NSD DFB XHR
TI - CO0: IOC - 0. BIO - 0. Eflg - 000001 040000 PS - 170000
PC - 130614 Regs 0-6 114312 000000 000000 061444 054070 061444 126406
>DEV
VF0: Offline Unloaded Type=unknown
VF1: Offline Unloaded Type=unknown
TT0: [200,200] [200,200] - Logged in Loaded
TT1: [200,200] [,] - Logged in Loaded
TT2: Offline Loaded
TT3: Offline Loaded
TT4: Offline Loaded
TT5: Offline Loaded
TT6: Offline Loaded
TT7: Offline Loaded
TT10: Offline Loaded
TT11: Offline Loaded
TT12: Offline Loaded
TT13: Offline Loaded
TT14: Offline Loaded
TT15: Offline Loaded
TT16: Offline Loaded
TT17: Offline Loaded
TT20: Offline Loaded
TT21: Offline Loaded
TT22: Offline Loaded
TT23: Offline Loaded
TT24: Offline Loaded
TT25: Offline Loaded
TT26: Offline Loaded
TT27: Offline Loaded
TT30: Offline Loaded
TT31: Offline Loaded
TT32: Offline Loaded
TT33: Offline Loaded
TT34: Offline Loaded
TT35: Offline Loaded
VT0: Offline Unloaded
RD0: Loaded
MY0: Public Mounted Loaded Label=RSX11MPBL87 Type=unknown
MY1: Offline Loaded Type=unknown
MY2: Offline Loaded Type=unknown
MY3: Offline Loaded Type=unknown
DD0: Offline Loaded Type=unknown
DD1: Offline Loaded Type=unknown
LP0: Offline Loaded
NL0: Offline Loaded
TI0:
CO0: TT0:
CL0: TT0:
SP0: MY0:
LB0: MY0:
SY0: MY0:
>TAS
...LDR 12.00 SYSPAR 248. 00004300 LB0:-00000001504 FIXED
TKTN 07.01 SYSPAR 248. 00010500 LB0:-00000002456 FIXED
RMDT0 05.00 GEN 225. 00042000 LB0:-00000002476
MCR... 07.00 SYSPAR 160. 00033500 LB0:-00000001563 FIXED
TAST1 07.00 GEN 160. 00040300 LB0:-00000001621
F11ACP 07.00 GEN 149. 00011100 LB0:-00000001514
HRC... 05.00 GEN 140. 00042500 LB0:-00000002257
...RMD 05.00 GEN 225. 00042000 LB0:-00000002476
...MCR 07.00 GEN 160. 00040300 LB0:-00000001621
...MOU 26.06 GEN 160. 00045600 LB0:-00000002127
...CON 05.00 GEN 50. 00135600 LB0:-00000002332
>
Драйвер MY: для RSX-11M-PLUS и Micro/RSX.
Сильно не доводил до ума (не предусматривает случая когда контроллер завис).
Поддерживает несколько контроллеров.
Драйвер векторизован (переносится между системами без пересборки).
Опробован вживую на ДВК4.
MYPRE.MAC - файл параметров
MYTAB.MAC - таблицы драйвера
MYDRV.MAC - драйвер
MYCMD.RAR - командные файлы для MAC и TKB
Некоторые DECовские утилиты критичны к имени устройства.
FLX к примеру категорически возражает, что на устройстве с именем
MY: может быть файловая структура RT-11.
Приходится через виртуальные диски с альтернативными именами делать. По идее можно альтернативные имена и напрямую делать в самом драйвере, только не знаю как...
Код:>DEV MY:
MY0: Public Mounted Loaded Label=RSX11MPBL87 Type=UNKN
MY1: Public Mounted Loaded Foreign Type=UNKN
MY2: Loaded Type=UNKN
MY3: Loaded Type=UNKN
>DIR MY:[0,0]
Directory MY0:[0,0]
6-MAR-12 18:30
INDEXF.SYS;1 100. 05-MAR-12 13:15
BITMAP.SYS;1 2. 05-MAR-12 13:15
BADBLK.SYS;1 0. 05-MAR-12 13:15
000000.DIR;1 1. C 05-MAR-12 13:15
CORIMG.SYS;1 0. 05-MAR-12 13:15
001054.DIR;1 1. C 05-MAR-12 13:15
003054.DIR;1 1. C 05-MAR-12 13:15
Total of 105./105. blocks in 7. files
>FLX MY1:/RT/LI
FLX -- Invalid device
>VCP CON MY1:/DRV:DU
VCP - Device VF0: (DU1:) has been assigned.
>FLX DU1:/RT/LI
Directory DU1:
06-MAR-12
SWAP .SYS 28. 07-APR-11
RT11SB.SYS 101. 01-MAR-12
DW .SYS 7. 08-MAR-90
MY .SYS 3. 19-FEB-80
SL .SYS 17. 01-MAR-12
DIR .SAV 20. 31-OCT-98
PIP .SAV 30. 31-OCT-98
DUP .SAV 52. 31-OCT-98
RESORC.SAV 35. 31-OCT-98
MACRO .SAV 63. 24-APR-11
LINK .SAV 59. 31-OCT-98
SYSMAC.SML 92. 31-OCT-98
SYSLIB.OBJ 84. 31-OCT-98
KED .SAV 85. 31-OCT-98
K52 .SAV 81. 07-APR-11
VDT .SAV 8. 01-MAR-12
DATE .SAV 4. 29-FEB-12
IOSCAN.SAV 3. 18-SEP-11
MMUT1 .SAV 2. 02-MAR-12
STRTSB.COM 1. 01-MAR-12
SLOAD .SAV 2. 05-MAR-12
RSX11M.SYS 498. 05-MAR-12
< Unused > 311.
311. Free blocks
Total of 1275. blocks in 22. files
>
До кучи...
Можно отметить следующее:
1. Компьютер, на котором запускался тест, выполняет команду ADС Memory в 5 раз быстрее, чем 1801ВМ1, работающий на частоте 5 МГц, и в 4 раза быстрее, чем 1801ВМ2, работающий на частоте 8 МГц.
2. Как и ожидалось - родные терминалы фирмы DEC генерят многобайтовые посылки гораздо медленнее, чем позволяет максимальная скорость порта ( в данном случае со скоростью ~ 120 CPS ).
И неспроста - ведь совсем недавно мы убедились, что если посылать многобайтовые коды "расширенных" клавиш со скоростью 9600 BPS в компьютер, имеющий быстродействие LSI-11 ( ~ 0.120 MIPS == 125 команд/байт ), то возникновение "реверсивного глюка" при работе с SJ-монитором весьма вероятно.
Кстати, в описании мониторов DEC говорится, что скорости порта на приём и передачу никак не связаны и могут настраиваться отдельно.
Отсюда вопрос - на какую скорость настроен в нашем случае выходной порт терминала VT220 ?
Тут еще кэш может влиять на скорость работы с памятью.
Тут есть еще вот какой нюанс: если слать со скоростью порта с PC на эти терминалы - много чего потеряется. Особенно на CM7209. А на реальных машинах лупи во всю дурь - ни одного символа не потеряешь. Так, что возникновение глюка в SJ по весей видимости вероятно только для не-DECовского железа :)
Терминалы вроде не бывают с раздельной скоростью. Это на модемы расчитано.
Скорости DL*11 не настраиваются в принципе. Они могут конфигуриться перемычками, но раздельно вод и выход не поддерживают. DLV11-E возможно умеет - он под модем заточен. У меня выбор до 38400. Ни в одном из режимов если лупить во всю дурь в порт с PC нельзя добиться переворота буфера в SJ, но потери гарантированы при скоростях выше 9600.
На мультиплексорах (как минимум DZ*11) программно можно настроить скорость раздельно на вход и выход и в RSX есть еще параметр - скорость на которой модем отвечать будет.
Какой RTS, CTS, DSR, DTR? У меня DLV-11 порты :)
---------- Post added at 17:20 ---------- Previous post was at 17:19 ----------
Кстати посмотрел, сейчас у меня в E11 просто сказано скорость 9600, FIFO не заполнять больше чем на 1 символ.
---------- Post added at 17:22 ---------- Previous post was at 17:20 ----------
Собственно вот - из списка загрузчиков можно получить названия DLV11 портов которые умеют CTSить-DSRить...
Ну а мультиплексоры все вроде умеют.Код: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
Commands are Help, Boot, List, Setup, Map and Test.
Type a command then press the RETURN key:
В меню SETUP VT100 есть такие пункты:
http://zx.pk.ru/attachment.php?attachmentid=33706
Да, есть у меня на VT220 раздельная настройка.
Но для со стороны компа нету :)
DZQ11 есть, но надо починить в нем выбор вектора - на векторе 300 он мне нафиг не нужен :)
Ну вот - с твоей подачи увидел еще одну интересную настройку. Лови новый тест :)
Причём, как видим - выходной порт настроен на скорость передачи 960 CPS ( 9600 BPS / 10 BPC ), но терминал шлёт многобайтовые посылки со скоростью всего 120 CPS.
А более старые терминалы DEC шлют многобайтовые посылки ещё медленнее - со скоростью кадровой развёртки ( 60 CPS ).
Думаю всем, кто эмулирует терминалы DEC, есть смысл иметь это в виду.
Т.е. и при включённом, и при выключенном терминале - содержимое всех 4-х регистров ( TKS, TKB, TPS, TPB ) неизменно.
Проверим?
У DLV11-E/F есть дополнительные сигналы.
Вообще поддерживается XON/XOFF управление обычно.
Но кроме всего прочего в RT-11 да и в RSX-11 в принципе работа с терминалами организована не особо удачно. В этом плане TSX отличается в хорошую сторону. Для примера, TRANSF, висящий в системных задачах почти ложит намертво BG JOB, а в TSX можно пустить TRANSF на высоком приоритете и вполне себе параллельно работать многоусерно :)
---------- Post added at 17:58 ---------- Previous post was at 17:57 ----------
CM7209 в принципе использует (что не спасает его при подключении к живому PC с эмулятором). VT220 настраивается, умеет и доп сигналы пользовать.
Просто DL/KL - самый примитивный вид интерфейса и только поздние развития заточенные под линии связи поддерживают аппаратный контроль.
---------- Post added at 17:59 ---------- Previous post was at 17:58 ----------
У CM7209 кстати в описании еще написано сколько нулей-заполнителей надо слать при переводах строки :)
Получается, что если к DL11-W ничего не подключено, то это никак не помешает выводить туда байты в любых количествах.
Так?