А у тебя терминал (даже если он и эмулируется на ПП) не считается? :)
Вид для печати
Я уже готов "написать" адаптер COM-порта для своего эмулятора - дайте, что можно скопипастить.
Кстати, RT-11 у меня уже нормально грузится через порт своего системного терминала. Правда, пока только локально - через Telnet ещё не пробовал.
Я к сожалению на пц только под унихами програмил COM порты. В виндовсном не силен. Могу расписать все, что касается PDP-11 и выходит за рамки битов 6,7 CSRов и 0-7 DATа :)
---------- Post added at 22:12 ---------- Previous post was at 22:10 ----------
Хотя для УКНЦ в доке и так все расписано вроде.
---------- Post added at 22:15 ---------- Previous post was at 22:12 ----------
telnet дело муторное, но не невозможное, особенно если серверная часть пишется с нуля :)
по суте в телнете заложено все, что нужно для проброса serial порта, но реализаций ни разу не видел.
В целом, мы с Andrey_Ak часто соединяли его ДВК с моим E11 или 11/83 по телнету и гоняли файлы - вобщем-то и так обходились :)
Я уже написал полную поддержку Telnet для эмулятора.
Вызывается так (даю только те строчки, которые нужно добавить в соответствующие секции загружаемого конфига):
Код:[objects]
Con1 = Ядро:Console
IP_Adapter1 = Ядро:Terminal_IP_Adapter
IP_Adapter2 = Ядро:Terminal_IP_Adapter
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[links]
IP_Adapter1 [Log] > Con1
IP_Adapter2 [Log] > Con1
TerminalPort <==> VT52 ; <- Эту строчку убрать
TerminalPort <==> IP_Adapter1
IP_Adapter2 <==> VT52
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[Con1.ini]
TabTitle = "IP Log"
InitialStateOf[StatusBar] = 1
SaveChangesFor[StatusBar] = 0
InitialStateOf[ControlBar] = 0
SaveChangesFor[ControlBar] = 0
InitialStateOf[Log]=0
SaveChangesFor[Log]=0
InitialStateOf[Dump]=1
SaveChangesFor[Dump]=0
LeftDumpSeparator=«
RightDumpSeparator=»
[IP_Adapter1.ini]
Listen_at_IP =""
Listen_at_Port = 8023
Connect_to_IP =""
Connect_to_Port= 0
[IP_Adapter2.ini]
Listen_at_IP = ""
Listen_at_Port = 0
Connect_to_IP = 127.0.0.1
Connect_to_Port= 8023
Боюсь только, что при релизе Telnet-адаптера - параметры Listen_at_IP и Listen_at_Port будут заменены на Listen_on_IP и Listen_on_Port.
Так они будут иметь чуть больше смысла для тех, кто знает английский :)
Посмотрим на досуге.
IP с портом вообще можно совместить в одном параметре.
А если быть строгим относительно терминологии и at/on, то получится вообще listen for (a connection) и bind to (address, port) :)
А listen on - это так сказать сокращение - нечто вроде DECовского CALLR :)
Сервис от создателей драйвера )))
Код:При заказе желательно указать параметры генерации системы и тип накопителя (чтобы считать копию стандартными средствами). Документация прилагается. Возможна поставка драйвера для SJ/FB - мониторов.
Загрузка RT-11 через порт её системного терминала ( продолжающаяся при CPS 960 ровно 1 минуту ) довольно поучительна :)
Сообщения на экране того самого системного терминала, через порт которого идут запросы чтения/записи драйвера псевдодиска, вполне обычны:
Но вот сами запросы - довольно любопытны:Код:.BO/FORE HX0:
HX Boot-I-Cold boot..
HX DSK/TTY multiplexer v1.0 2012
SL V08.00 [SW] Сторожевых С.В. 1988
RT-11SB (S) V05.07 C
.SET USR NOSWAP
.SET EDIT K52
.SET TT FORM
.SET SL ON
.
Особенно хорош запрос на чтение одного слова из нулевого блока загружаемого диска :)Код:HX: READ : uUnit[0] ; uBlock[0000] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0000] ; uWordCount[0001]
HX: READ : uUnit[0] ; uBlock[0002] ; uWordCount[1024]
HX: READ : uUnit[0] ; uBlock[0006] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0048] ; uWordCount[0137]
HX: READ : uUnit[0] ; uBlock[0051] ; uWordCount[0167]
HX: READ : uUnit[0] ; uBlock[0080] ; uWordCount[0163]
HX: READ : uUnit[0] ; uBlock[1400] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[1400] ; uWordCount[0610]
HX: READ : uUnit[0] ; uBlock[0047] ; uWordCount[0232]
HX: READ : uUnit[0] ; uBlock[0055] ; uWordCount[10932]
HX: READ : uUnit[0] ; uBlock[0050] ; uWordCount[0159]
HX: READ : uUnit[0] ; uBlock[0053] ; uWordCount[0112]
HX: READ : uUnit[0] ; uBlock[0049] ; uWordCount[0074]
HX: READ : uUnit[0] ; uBlock[0052] ; uWordCount[0177]
HX: READ : uUnit[0] ; uBlock[1556] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0141] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[1542] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0154] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0155] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[1547] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0156] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[1551] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0143] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0159] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[1338] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0136] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0006] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0143] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0144] ; uWordCount[2560]
HX: WRITE: uUnit[0] ; uBlock[0144] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0140] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0006] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[1336] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0110] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0112] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0110] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0112] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0110] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0159] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0112] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0160] ; uWordCount[2304]
HX: WRITE: uUnit[0] ; uBlock[0160] ; uWordCount[1280]
HX: READ : uUnit[0] ; uBlock[0104] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0160] ; uWordCount[1127]
HX: READ : uUnit[0] ; uBlock[0110] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0006] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0159] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0112] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0160] ; uWordCount[2304]
HX: WRITE: uUnit[0] ; uBlock[0160] ; uWordCount[1280]
...
Теперь посмотрим, что сидит в памяти:
Код:.SH MEM
Address Module Words
------- ------ -----
160000 IOPAGE 4096.
156474 HX 354.
134724 RMON 4532.
130406 SL 1127.
120342 USR 2066.
001000 ..BG.. 20337.
.
Код:HX: READ : uUnit[0] ; uBlock[0134] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0136] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0006] ; uWordCount[0512]
HX: READ : uUnit[0] ; uBlock[0271] ; uWordCount[0256]
HX: READ : uUnit[0] ; uBlock[0272] ; uWordCount[3072]
HX: READ : uUnit[0] ; uBlock[0295] ; uWordCount[1559]
HX: READ : uUnit[0] ; uBlock[0055] ; uWordCount[6400]
Ну и дела!
Оказывается, последняя версия DESS - имеет ещё и режим HEX:
Кстати, для получения в эмуляторе текстовой копии экрана терминала - нужно нажать <PrintScreen>Код:Block=000000/00000. Adres=000061 Type=Hex Edit HD0:HX.SYS Size=00004.
000/ 36 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *62..............*
020/ 00 00 08 F8 00 00 00 00 00 00 00 00 00 00 00 00 *...x............*
040/ 01 00 00 02 00 00 00 00 DE 06 E0 02 40 06 F3 85 *........^.`.@.s.*
060/ 04 00 E0 04 00 02 E0 00 00 00 00 00 00 00 00 00 *..`...`.........*
100/ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 0A *................*
120/ 48 58 20 44 53 4B 2F 54 54 59 20 6D 75 6C 74 69 *HX DSK/TTY multi*
140/ 70 6C 65 78 65 72 20 20 20 76 31 2E 30 20 20 32 *plexer v1.0 2*
160/ 30 31 32 0D 0A 00 00 00 00 00 00 00 00 00 70 FF *012...........p.*
200/ A0 00 DF 0B 34 00 0B 02 C0 11 C0 65 C4 FF 05 01 * ._.4...@.@eD...*
220/ 1F 94 76 FF DF 8B 74 FF FD 80 C8 8B F9 02 A1 00 *..v._.t.}.H.y.!.*
240/ 87 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *................*
260/ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *................*
300/ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *................*
320/ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *................*
340/ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *................*
360/ F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *p...............*
Стек : 000000 000000 000000 000000 000000 000000 000000
Макро-11:
Так как процессор 1801ВМ1 не поддерживает команды EIS и FIS, то при появлении ДВК-2 с процессором 1801ВМ2, который эти команды поддерживает - у пользователей ДВК возникла проблема совместимости, решить которую был призван драйвер EM.SYS, эмулирующий команды EIS и FIS.
У меня обнаружились исходники двух версий этого драйвера - "общеизвестной" v1.0 и последней - v1.1 ( в последней версии добавлена возможность генерации драйвера с эмуляцией команд FIS при помощи команд FPP ).Код:; Ныс И.Д.
; Московский
; Инженерно-Физический
; Институт
; каф. 17
; 6 Марта 1985 г. - начало работы.
; 25 марта 1985 г. - конец работы.
; 17 апреля - изменена установка признаков DIV.
; 23 апреля - изменен алгоритм команды MUL.
; 10 мая - прогонка FIS/EIS тестов, коррекция особых ситуаций.
; 2 ноября - переходы по таблице - PIC код, добавлена шапка драйвера
;01 31 окт. 1988 - эмулятор FIS для машины с FPP.
; При работе над эмулятором использовались
; - эмулятор Паскаля
; - подпрограммы Фортран-библиотеки
; - описание процессора M2
; - эмулятор FIS(FPP) из Модулы-2
; Модуль эмулирует наборы команд
; EIS: MUL 070RSS 0.35- 0.5 MS
; DIV O71RSS 0.6
; ASH 072RSS 0.3 - 0.35(вправо)
; - 0.4 (влево)
; ASHC 073RSS 0.3 - 0.5 (вправо)
; - 0.61(влево)
; FIS: FADD 07500R 0.9 - 1.3 MS
; FSUB 07501R - " " -
; FMUL 07502R 1.0 -1.6
; FDIV 07503R 1.6
;
; Времена для процессора с быстродействием
; около 250000 команд регистр - регистр в
; секунду, цикл памяти - 500 наносекунд
; После прерывания по резервной команде, дол-
; жна осуществляться передача управления
; в точку $EMUL.
; Управление передается в точку $ILCOD,
; Если эммулятор не способен обработать преры-
; вание ( вызванное командой, не входящей в
; FIS или EIS)
; Для исключения FIS или EIS набора из эмуля-
; тора, поставьте ";" перед определениями со-
; ответствующих символов в следующих строках
; Эмулятор FIS для процессора с отдельным процессором
; плавающей запятой включен Мухамеджановым Алексеем
; 01 ноября 1988 г., (C) фирма "МИГ" кооп. <1988>
; Команды XOR, SOB включены Яковлевым Михаилом
; 12-декабря-86 г. МИФИ, каф. 25
;
; XOR - 0.3 MS
; SOB - 30-50 MKS (в зависимости от вложенности)
При сравнении этих исходников:
EM.SYS v1.0 (фрагмент):
Код:
.TITLE EM
; ДРАЙВЕР-ЭМУЛЯТОР FIS/EIS НАБОРА КОМАНД.
; КОМАНДЫ SET EM ON/OFF ИЗ TH ДРАЙВЕРА БЕЛИЦКОГО Е.
.SBTTL MACROS AND DEFINITIONS
.MCALL .DRDEF, .PRINT, .EXIT, .WAIT
.DRDEF EM, 377, 0, 0, 0, 10
; Имя, Код, Тип, Размер, Адрес, Вектор
JSW=44 ; Слово описания
SYSPTR=54 ; Указатель на начало монитора
EIS$=400 ; Бит расширенного набора
CONFIG=370 ; Смещение слова конфигурации
SYSGEN=372 ; Слово параметров
EIS=1 ; Включить EIS
FIS=1 ; Включать FIS
; SM3=1 ; Включить SOB, XOR
.SBTTL INSTALATION VERIFICATION
.ASECT
.=200
NOP
RETURN
; Определение состояния драйвера
FINDRV:
MOV PC,R0
ADD #DEVNAM-.,R0
MOV PC,-(SP)
ADD #AREA-.,(SP)
EMT 342 ; PIC .DSTATUS
BCS O.BAD
MOV AREA+4,R1
O.GOOD:
TST (PC)+
O.BAD: SEC
RETURN
DEVNAM:
.RAD50 /EM /
AREA:
.BLKW 4
EMON: .ASCIZ /?EM-I-Аlready running/
IMSG: .ASCII /?EM-I-V1.0 BY I.NYS, 116-20-42/<15><12>
.ASCII /OPTIONS: /
.IIF DF EIS .ASCII / EIS/
.IIF DF FIS .ASCII / FIS/
.IIF DF SM3 .ASCII / SOB XOR/
.BYTE 0
.EVEN
.IIF GT,<.-400>, .ERROR .-400; INSTALL CODE TO BIG!
EM.SYS v1.1 (фрагмент):
Возникло ощущение, что перенеся в версии 1.1 DEVNAM и AREA за пределы инсталляционного кода - разработчики стали получать постоянную ошибку инсталляции, что заставило изменить завершение инсталлятора с такого:Код:
.TITLE EM
; Драйвер-эмулятор FIS/EIS набора команд.
; Команды SET EM ON/OFF из ТН драйвера Белицкого Е.
.SBTTL MACROS AND DEFINITIONS
.MCALL .DRDEF, .PRINT, .EXIT, .WAIT
.DRDEF EM, 377, 0, 0, 0, 10
; ИМЯ, КОД, ТИП, РАЗМЕР, АДРЕС, ВЕКТОР.
JSW=44 ; Слово описания
SYSPTR=54 ; Указатель на начало монитора
EIS$=400 ; Бит расширенного набора
CONFG1=300 ; Смещение 1 слова конфигурации
CONFIG=370 ; Смещение 2 слова конфигурации
SYSGEN=372 ; Слово параметров
;
EIS=1 ; Включить EIS
; SM3=1 ; Включить SOB, XOR
; FPP=1 ; Включить FIS на FPP
.IF NDF FPP
FIS=1 ; Включить FIS
.ENDC
.IF DF FPP
AC0 =R0
AC1 =R1
FPPS =^O1400
FPP$ =^O100
.ENDC
.SBTTL INSTALATION VERIFICATION
.ASECT
.=200
NOP
RETURN
; Определение состояния драйвера
FINDRV:
MOV PC, R0
ADD #DEVNAM-., R0
MOV PC, -(SP)
ADD #AREA-., (SP)
EMT 342 ; PIC .DSTATUS
BCS OO.BAD ; Ошибка .DSTATUS
MOV AREA+4, R1
O.GOOD: CMP (PC)+,(PC)+
OO.BAD: TST (SP)+
O.BAD: SEC
RETURN
L1$: MOV PC, R0
ADD #EMON-., R0
PEX: .PRINT
BR O.GOOD
EMON: .ASCIZ /?EM-I-Already running/
IMSG: .ASCII /EM V1.1 by I.NYS, MX/<15><12>
.ASCII /Options:/
.IIF DF EIS .ASCII / EIS/
.IIF DF FPP .ASCII / FIS(for FPP)/
.IIF DF FIS .ASCII / FIS/
.IIF DF SM3 .ASCII / SOB XOR/
.BYTE 0
.EVEN
.IIF GT,<.-400>, .ERROR .-400; INSTALL CODE TO BIG!
.SBTTL SET OPTION PARAMETR TABLE
.DRSET INFORM, -1, O.INF ; Параметры генерации
.DRSET ON,-1,O.ON ; Включить
.DRSET OFF,-1,O.OFF ; Выключить
.DRSET SYSGEN,NOP,O.SYSG ; SYSGEN
.SBTTL SET OPTION PROCESSING ROUTINES
O.SYSG:
MOV @#SYSPTR,R0 ; Не знаю, будет ли работать с диспетчером
BIT #2,SYSGEN(R0) ; MMG$T
BNE O.BAD
MOVB SYSGEN(R0), 60
RETURN
O.ON:
CALL FINDRV
TST R1 ; Если драйвер уже загружен,
BNE L1$ ; напечатать об этом
MOV @#SYSPTR, R0
BIS #EIS$,CONFIG(R0) ; включить EIS
.IF DF FPP
BIT #FPP$,CONFG1(R0) ; Ошибка, если нет FPP.
BNE 2$
JSR R0,3$
.ASCIZ /?EM-F-Use FPP/
.EVEN
3$: .PRINT
MOV (SP)+,R0;
BR O.BAD
2$:
.ENDC
JSR R1, SETCMD
.ASCIZ /$LOAD EM/
.BYTE 200
.EVEN
RETURN
O.INF:
MOV PC, R0
ADD #IMSG-., R0
BR PEX
O.OFF: CALL FINDRV
TST R1 ; Драйвер загружен?
BEQ N.OFF ; Уже нет
JSR R1, SETCMD
.ASCIZ /$UNLOAD EM/
.ASCIZ /$SET EM OFF/
.EVEN
RETURN
N.OFF:
MOV PC, R0
ADD #NOEIS-., R0
MOV R0, @#10
MUL R0, R0 ; Интересно, есть EIS?
MOV @#4, @#10 ; Вектор
MOV @#6, @#12 ; Статус
BIS #1, @#12 ; С установленным C - разрядом
CLC
RETURN
DEVNAM:
.RAD50 /EM /
AREA:
.BLKW 4
NOEIS: MOV @#SYSPTR, R0
BIC #EIS$,CONFIG(R0) ; Включить EIS
RTI
; Передача команд монитору
SETCMD:
MOV #512, R0
CLR R2
1$: INC R2
MOVB (R1)+, (R0)+
BPL 1$
DEC R2
MOV R2, @#510
BIS #4040, @#JSW
CLR R0
.EXIT
.IIF GT,<.-1000>, .ERROR .-1000; SET CODE TO BIG!
v1.0
на такое:Код:MOV PC,-(SP)
ADD #AREA-.,(SP)
EMT 342 ; PIC .DSTATUS
BCS O.BAD
MOV AREA+4,R1
O.GOOD:
TST (PC)+
O.BAD: SEC
RETURN
DEVNAM:
.RAD50 /EM /
AREA:
.BLKW 4
v1.1
Код:MOV PC, -(SP)
ADD #AREA-., (SP)
EMT 342 ; PIC .DSTATUS
BCS OO.BAD ; Ошибка .DSTATUS
MOV AREA+4, R1
O.GOOD: CMP (PC)+,(PC)+
OO.BAD: TST (SP)+
O.BAD: SEC
RETURN
Вот такой выясняется момент с этим драйвером на УКНЦ.
Скрытый текст
Он присутствует на "эталонной" дискете от СЭМЗ - с ситемой - которая поставлялась вместе с УКНЦ. Так вот сообщение при старте - драйвер присутствует (проинсталлирован)
http://savepic.net/2503765.png
Но если посмотреть dir/fu системы - они его словно в последний момент
запихнули и проинсталлировали - ну явно не в первом потоке sys файлов,
http://savepic.net/2493525.jpg
(я молчу что они (например) вообще не удосужились на системную дискету записать ucl из за чего монитор его ищет и всё время ругается,
зато запихнули возможность работы с какой-то базой данных ??? бред)
так вот em.sys воткнули позже остальных, почему? Для перестраховки?
Реально на УКНЦ он нужен или нет?
Версия похоже самая первая.
http://savepic.net/2497621.jpg
[свернуть]
:confused_std:
Можно стандартными макросами нагляднее выразить:Код:MOV PC, -(SP)
ADD #AREA-., (SP)
EMT 342
Код:.ADDR #AREA, -(SP)
.DSTATUS
"Самая первая" версия у меня есть - но без исходника, да и кривая какая-то, поэтому ну её..
...
P.S.
С EM.SYS связан один интересный момент.
Если при активированном EM.SYS выполнить команду SH CON, то Resorc тихо вылетит после строчки "Extended Instruction Set (EIS)"
Код:.SE EM ON
.SH CON
RT-11SB (S) V05.07 C
Booted from HD1:RT11SB
USR is set NOSWAP
EXIT is set SWAP
KMON is set NOIND
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set ON
EDIT is set K52
FORTRAN is set FORTRA
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
LSI 11 or PDP 11/03 Processor
56KB of memory
Extended Instruction Set (EIS)
.
То, что это именно вылет - особенно хорошо заметно при выполнении команды SH ALL.
---------- Post added at 21:07 ---------- Previous post was at 21:05 ----------
Думаю, что такое вполне возможно. Я даже подумываю сделать SET EM ON опцией по-умолчанию в эмуляторе ДВК-1, но надо бы как-то решить проблему с вылетом Resorc..
Код:.E 10-12
140244 000341
.SE EM ON
.E 10-12
126750 000340
.SH CON
RT-11SB (S) V05.07 C
Booted from HD1:RT11SB
USR is set NOSWAP
EXIT is set SWAP
KMON is set NOIND
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set ON
EDIT is set K52
FORTRAN is set FORTRA
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
LSI 11 or PDP 11/03 Processor
56KB of memory
Extended Instruction Set (EIS)
.E 10-12
126750 000340
Вот готовый (с загрузчиком) HD раздел для ДВК-эмулятора с монитором rt11-5.01 версии и кучей символьных игр и размера громадного (из этого обзора) предлагаю для экспериментов например )))
Он вроде их не подменяет, а грамотно использует .TRPSET и получает прерывание уже от системы.
---------- Post added at 01:18 ---------- Previous post was at 01:18 ----------
При этом если загрузить SD, то он будет выпадать в него.
---------- Post added at 01:19 ---------- Previous post was at 01:18 ----------
Кстати как раз на этом месте :)
Код:.LO SD
DBG Y01.16 - RT-11 ( SOFT PRO I/D SD: GRH )
.SH CONF
RT-11ZM (S) V05.07
Booted from DU3:RT11ZM
22 bit addressing is on
USR is set NOSWAP
EXIT is set SWAP
KMON is set NOIND
RUN is set VBGEXE
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set KMON
EDIT is set KEX
FORTRAN is set F77XM
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
PDP 11/83 Processor
2048KB of memory
Floating Point Accelerator Unit
Extended Instruction Set (EIS)
T4:(U) 16254
DBG>
В SD падает на тесте EAE. Возможно и там с него же улетает :)
Код:.TRPSET #AREA,#TRPEAE ;Catch traps to 4 or 10
CLRB @#EAECS0 ;Check first possible location
---------- Post added at 01:30 ---------- Previous post was at 01:27 ----------
То есть попросту драйвер перехватил @#10 и не может потом с ним грамотно разобраться.
hobot, У Вас на первой картинке чуть ниже обведенного что-то там от WD.
Это у Вас "эталонная дискете от СЭМЗ - с ситемой" такая? ;-)
Дизассемблер не запускается, значит этот код не выполняется.Код:.TRPSET #AREA,#TRPEAE ;Catch traps to 4 or 10
CLRB @#EAECS0 ;Check first possible location
NOP ;Delay an instruction due to T11
BCC 26$ ;If no trap, then Carry clear
25$: .TRPSET #AREA,#TRPEAE ;Catch for second try
CLRB @#EAECS1 ;Check second possible location
NOP ;Delay an instruction due to T11
BCS 113$ ;If trapped, no EAE
26$: PRINT EAE,<Extended Arithmetic Element (EAE)> ;Tell the user
Если установить запуск дизассемблера на метку START, установить быстродействие эмулятора 0.025 MIPS, выполнить команду SH CON, убедиться что был выход в KMON и тут же закрыть эмулятор - потоковый дизассемблер успевает сгенерить больше 5 мегабайт листинга.
Вот его начало:
Код:011676 [000000]: MOV SP, 001046 ; R6 :001000 -> 001046
011702 [000000]: MOV #1978., @#000046 ; 011704:003672 -> 000046
011710 [000000]: EMT 355
141206 [000000]: BIC #15., 2(SP) ; 141210:000017 -> 000776:000000
141214 [000004]: MOV R5, -(SP) ; R5 :135656 -> 000772
141216 [000010]: MOV R4, -(SP) ; R4 :133730 -> 000770
141220 [000010]: MOV 4(SP), R5 ; 000774:011712 -> R5
141224 [000000]: MOV -(R5), R4 ; 011710:104355 -> R4
141226 [000010]: CMPB R4, #251. ; R4 : 355 -> 141230: 373
141232 [000011]: BEQ 141050
141234 [000011]: JSR R3, 151020 ; R3 :075000 -> 000766
151020 [000011]: MOV R2, -(SP) ; R2 :011670 -> 000764
151022 [000001]: MOV R1, -(SP) ; R1 :000016 -> 000762
151024 [000001]: MOV R0, -(SP) ; R0 :030730 -> 000760
151026 [000001]: CALL (R3) ; R7 :151030 -> 000756
141240 [000001]: TST (SP)+ ; 000756:151030
141242 [000010]: CLR R2 ; R2 :011670
141244 [000004]: MOV 136176, R5 ; 136176:137264 -> R5
141250 [000010]: INC 268.(R5) ; 137700:000000
141254 [000000]: MOV SP, R1 ; R6 :000760 -> R1
141256 [000000]: CMPB R4, #252. ; R4 : 355 -> 141260: 374
141262 [000011]: BCS 141372
141372 [000011]: ADD #16., R1 ; 141374:000020 -> R1 :000760
141376 [000000]: MOV R4, R5 ; R4 :104355 -> R5
141400 [000010]: BIC #-16., R4 ; 141402:177760 -> R4 :104355
141404 [000000]: BIC #-241., R5 ; 141406:177417 -> R5 :104355
141410 [000000]: ASR R5 ; R5 :000340
141412 [000000]: ASR R5 ; R5 :000160
141414 [000000]: ASR R5 ; R5 :000070
141416 [000000]: ADD PC, R5 ; R7 :141420 -> R5 :000034
141420 [000010]: MOV -838.(R5), R5 ; 137746:003354 -> R5
141424 [000000]: ROR R5 ; R5 :003354
141426 [000000]: BCC 141436
141436 [000000]: ASR R5 ; R5 :001566
141440 [000000]: BCC 141454
141454 [000000]: ASL R5 ; R5 :000673
141456 [000000]: MOV R5, -(SP) ; R5 :001566 -> 000756
141460 [000000]: MOV 136176, R5 ; 136176:137264 -> R5
141464 [000010]: ASL R4 ; R4 :000015
141466 [000000]: MOV R4, R3 ; R4 :000032 -> R3
141470 [000000]: ASL R3 ; R3 :000032
141472 [000000]: ASL R3 ; R3 :000064
141474 [000000]: ADD R4, R3 ; R4 :000032 -> R3 :000150
141476 [000000]: ADD 24.(R5), R3 ; 137314:135662 -> R3 :000202
141502 [000010]: CLRB @#000052 ; 000052: 000
141506 [000004]: ADD (SP)+, PC ; 000756:001566 -> R7 :141510
143276 [000010]: TST (R4)+ ; 000032:000000
143300 [000004]: ADD PC, R4 ; R7 :143302 -> R4 :000034
143302 [000010]: ADD (R4), PC ; 143336:177372 -> R7 :143304
142676 [000011]: CLRB 199.(R5) ; 137573: 000
142702 [000004]: CALL 145326 ; R7 :142706 -> 000756
145326 [000004]: MOV @#000044, R3 ; 000044:020000 -> R3
145332 [000000]: BIC #-20481., R3 ; 145334:127777 -> R3 :020000
145336 [000004]: BIT #4096., R3 ; 145340:010000 -> R3 :000000
145342 [000004]: BEQ 145350
145350 [000004]: MTPS #224. ; 145352: 340 -> PSW :000004
145354 [000340]: NOP
145356 [000340]: BIC #20480., 260.(R5) ; 145360:050000 -> 137670:050000
145364 [000344]: BIS R3, 260.(R5) ; R3 :000000 -> 137670:000000
145370 [000344]: MTPS #0 ; 145372: 000 -> PSW :000344
145374 [000000]: RETURN ; 000756:142706 -> R7
142706 [000000]: BR 142674
142674 [000000]: BR 142464
142464 [000000]: MOV (SP)+, R0 ; 000760:030730 -> R0
142466 [000000]: MOV (SP)+, R1 ; 000762:000016 -> R1
142470 [000000]: MOV (SP)+, R2 ; 000764:011670 -> R2
142472 [000000]: MOV (SP)+, R3 ; 000766:075000 -> R3
142474 [000000]: MOV 136176, R5 ; 136176:137264 -> R5
142500 [000010]: DEC 268.(R5) ; 137700:000001
142504 [000004]: BNE 142546
142506 [000004]: MOV 270.(R5), R4 ; 137702:000000 -> R4
142512 [000004]: BEQ 142546
142546 [000004]: JMP 153532
153532 [000004]: MOV (SP)+, R4 ; 000770:133730 -> R4
153534 [000010]: MOV (SP)+, R5 ; 000772:135656 -> R5
153536 [000010]: RTI
011712 [000000]: MOV 001046, SP ; 001046:001000 -> R6
011716 [000000]: MOV #988., -(SP) ; 011720:001734 -> 000776
011722 [000000]: MOV #747., -(SP) ; 011724:001353 -> 000774
011726 [000000]: MOV #580., -(SP) ; 011730:001104 -> 000772
011732 [000000]: CLR -(SP) ; 000770:133730
011734 [000004]: EMT 345
141206 [000000]: BIC #15., 2(SP) ; 141210:000017 -> 000766:000004
141214 [000004]: MOV R5, -(SP) ; R5 :135656 -> 000762
141216 [000010]: MOV R4, -(SP) ; R4 :133730 -> 000760
141220 [000010]: MOV 4(SP), R5 ; 000764:011736 -> R5
141224 [000000]: MOV -(R5), R4 ; 011734:104345 -> R4
141226 [000010]: CMPB R4, #251. ; R4 : 345 -> 141230: 373
141232 [000011]: BEQ 141050
141234 [000011]: JSR R3, 151020 ; R3 :075000 -> 000756
151020 [000011]: MOV R2, -(SP) ; R2 :011670 -> 000754
151022 [000001]: MOV R1, -(SP) ; R1 :000016 -> 000752
151024 [000001]: MOV R0, -(SP) ; R0 :030730 -> 000750
151026 [000001]: CALL (R3) ; R7 :151030 -> 000746
141240 [000001]: TST (SP)+ ; 000746:151030
141242 [000010]: CLR R2 ; R2 :011670
141244 [000004]: MOV 136176, R5 ; 136176:137264 -> R5
141250 [000010]: INC 268.(R5) ; 137700:000000
141254 [000000]: MOV SP, R1 ; R6 :000750 -> R1
141256 [000000]: CMPB R4, #252. ; R4 : 345 -> 141260: 374
141262 [000011]: BCS 141372
141372 [000011]: ADD #16., R1 ; 141374:000020 -> R1 :000750
141376 [000000]: MOV R4, R5 ; R4 :104345 -> R5
141400 [000010]: BIC #-16., R4 ; 141402:177760 -> R4 :104345
141404 [000000]: BIC #-241., R5 ; 141406:177417 -> R5 :104345
141410 [000000]: ASR R5 ; R5 :000340
141412 [000000]: ASR R5 ; R5 :000160
141414 [000000]: ASR R5 ; R5 :000070
141416 [000000]: ADD PC, R5 ; R7 :141420 -> R5 :000034
141420 [000010]: MOV -838.(R5), R5 ; 137746:003354 -> R5
141424 [000000]: ROR R5 ; R5 :003354
141426 [000000]: BCC 141436
141436 [000000]: ASR R5 ; R5 :001566
141440 [000000]: BCC 141454
141454 [000000]: ASL R5 ; R5 :000673
141456 [000000]: MOV R5, -(SP) ; R5 :001566 -> 000746
141460 [000000]: MOV 136176, R5 ; 136176:137264 -> R5
141464 [000010]: ASL R4 ; R4 :000005
141466 [000000]: MOV R4, R3 ; R4 :000012 -> R3
141470 [000000]: ASL R3 ; R3 :000012
141472 [000000]: ASL R3 ; R3 :000024
141474 [000000]: ADD R4, R3 ; R4 :000012 -> R3 :000050
141476 [000000]: ADD 24.(R5), R3 ; 137314:135662 -> R3 :000062
141502 [000010]: CLRB @#000052 ; 000052: 000
141506 [000004]: ADD (SP)+, PC ; 000746:001566 -> R7 :141510
143276 [000010]: TST (R4)+ ; 000012:000340
143300 [000000]: ADD PC, R4 ; R7 :143302 -> R4 :000014
143302 [000010]: ADD (R4), PC ; 143316:000416 -> R7 :143304
143722 [000010]: MOV #-32768., R4 ; 143724:100000 -> R4
143726 [000010]: MOV #12., R2 ; 143730:000014 -> R2
143732 [000000]: BR 143762
В принципе можно установить проверку адреса, чтобы в листинг попадали только команды из младших адресов..
Сейчас так сделаю.
---------- Post added at 22:07 ---------- Previous post was at 22:01 ----------
Совсем другое дело - сразу видно, на чём всё заканчивается:
Код:013536 [000000]: BIT #64., R3 ; 013540:000100 -> R3 :105061
013542 [000004]: BNE 013576
013544 [000004]: MOV SP, R2 ; R6 :000772 -> R2
013546 [000000]: MOV #16384., -(R2) ; 013550:040000 -> 000770
013552 [000000]: CLR -(R2) ; 000766:013536
013554 [000004]: MOV #16384., -(R2) ; 013556:040000 -> 000764
013560 [000000]: CLR -(R2) ; 000762:010520
013562 [000004]: 075002 - Команда не опознана.
Trap to 010
Trap to 010 -> PC:126750 PSW:340
000000 [000000]: BIC R0, R0 ; R0 :004430 -> R0 :
000002 [000004]: EMT 350
Patron, скорее всего вылетает при проверке FIS-инструкций, EIS определяется по слову конфигурации.
Ну собственно на команде FADD R2 и вылетает. И явно видно, что именно из вектора берется 0, а там прописан .EXIT
---------- Post added at 02:14 ---------- Previous post was at 02:13 ----------
Код:CLR -(R2) ;
FADD R2 ;Do a floating point add
NOP ;One instruction delay for T11.
Вот это место:
Код:42$: PRINT MICFPU,<Floating Point Microcode>
BR 1$
41$: BIT #C1.FPU,R3 ;Got an FPU?
BEQ 1$ ;Branch if not
PRINT HWFPU,<FP11 Hardware Floating Point Unit>
1$: BIT #C2.EIS,R4 ;How about EIS?
BEQ 2$ ;Branch if no
PRINT EISET,<Extended Instruction Set (EIS)>
2$: BIT #C1.FPU,R3 ;Got an FPU?
BNE 3$ ;Yes. Don't check for FIS
MOV SP,R2 ;Point to stack (but don't destroy)
MOV #40000,-(R2) ;We'll check for FIS by adding .5 to .5
CLR -(R2) ;
MOV #40000,-(R2) ;
CLR -(R2) ;
FADD R2 ;Do a floating point add
NOP ;One instruction delay for T11.
BCS 3$ ;If C set, no FIS
PRINT FIS,<Floating Instruction Set (FIS)> ;Tell the user