Важная информация
Показано с 1 по 6 из 6

Тема: RTEM-11 -- RT-11 под RSX-11M, RSX-11M-PLUS, Micro/RSX, VAX/RSX

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Guru Аватар для form
    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    4,652
    Благодарностей: 1783

    По умолчанию RTEM-11 -- RT-11 под RSX-11M, RSX-11M-PLUS, Micro/RSX, VAX/RSX

    Ну вроде дозрел до создания отдельной темы по RTEM. Выложу сюда все, что на данный момент выкопано (напомню, в активе имелся весьма урезанный вариант RTEM/VAX V1.0 в виде собранной задачи и shared образ в котором не было ничего кроме RT-11 V4.0C для RTEM, DUP.SAV (адаптированного для RTEM), FIP.SAV, JOAT.SAV и драйвера VS.SYS. Остальных драйверов, увы, не было.

    С тех пор RTEM.TSK неоднократно патчился для некоторого приведения в порядок (поддержка Y2K дат, передача RTEM флагов в RT-11 V5 про которые он не знал, замена расширений файлов диска на DSK с SYS [как это должно быть в RTEM V2]). Также был пропатчен JOAT.SAV (расширение виртуальных дисков DSK, DU как допустимое устройство).

    Здесь последний вариант RTEM.TSK и RT11SH.DSK с RT-11 V5.7 с поддержкой расширенных номеров устройств, а также драйверами DU: и RK: (не полнофункциональными, но достаточными для работы). DU собран для поддержки номеров устройств 0-17.

    Скрытый текст

    Код:
    DIR   .SAV    20P 31-Oct-1998    PIP   .SAV    30P 31-Oct-1998
    FIP   .SAV    61P 16-May-2015    DUP   .SAV    52P 27-Feb-2016
    JOAT  .SAV    52P 16-May-2015    RESORC.SAV    35P 31-Oct-1998
    UCL   .SAV    16P 31-Oct-1998    MACRO .SAV    63P 31-Oct-1998
    LINK  .SAV    59P 31-Oct-1998    LIBR  .SAV    24P 31-Oct-1998
    CREF  .SAV     6P 31-Oct-1998    FORTRA.SAV   128P 23-Jul-2014
    F77   .SAV   327P 23-Jul-2014    PASCAL.SAV    58P 04-Mar-2013
    BASIC .SAV    52P 08-Oct-2015    BASPL .SAV   104P 02-Jun-2014
    COBOL .SAV   194P 21-Mar-2014    CBLSML.SAV   194P 21-Mar-2014
    CBLINK.SAV    47P 21-Mar-2014    CBLIBR.SAV    13P 21-Mar-2014
    CLASS .SAV    51P 21-Mar-2014    ISAM  .SAV    72P 21-Mar-2014
    ISMBLD.SAV    56P 21-Mar-2014    CBR063.SAV   119P 21-Mar-2014
    BATCH .SAV    26P 31-Oct-1998    KED   .SAV    85P 31-Oct-1998
    K52   .SAV    81P 20-May-2011    EDIT  .SAV    19P 31-Oct-1998
    TECO  .SAV    50P 31-Oct-1998    HELP  .SAV   161P 31-Oct-1998
    FILEX .SAV    22P 31-Oct-1998    DUMP  .SAV    10P 31-Oct-1998
    BINCOM.SAV    25P 31-Oct-1998    SRCCOM.SAV    26P 31-Oct-1998
    SIPP  .SAV    21P 31-Oct-1998    SLP   .SAV    13P 31-Oct-1998
    PAT   .SAV    11P 31-Oct-1998    MONMRG.SAV    14P 31-Oct-1998
    BUP   .SAV    68P 31-Oct-1998    QUEMAN.SAV    16P 31-Oct-1998
    SETUP .SAV    43P 31-Oct-1998    LET   .SAV     6P 31-Oct-1998
    SPLIT .SAV     3P 31-Oct-1998    TERMID.SAV     4P 31-Oct-1998
    TRANSF.SAV    16P 31-Oct-1998    MDUP  .SAV    22P 31-Oct-1998
    CONFIG.SAV    10P 31-Oct-1998    DBGSYM.SAV    10P 31-Oct-1998
    INDEX .SAV    11P 31-Oct-1998    INDEXX.SAV    14P 31-Oct-1998
    INDEXA.IMG   164P 31-Oct-1998    INDEXB.IMG   165P 31-Oct-1998
    INDEX .IDX     7P 31-Oct-1998    SYS   .SAV     3P 30-May-2011
    DISASM.SAV     8P 31-Mar-2013    VDT   .SAV     8P 09-Mar-2013
    ECHO  .SAV     2P 05-Mar-2016    ERA   .SAV     1P 05-Mar-2016
    CVT   .SAV     7P 05-Mar-2016    TTSET .SAV     5P 10-Apr-2015
    QUEUE .REL    14P 31-Oct-1998    RTMON .REL     8P 31-Oct-1998
    SPOOL .REL    12P 31-Oct-1998    SYSMAC.SML    92P 31-Oct-1998
    SYSTEM.MLB   148P 31-Oct-1998    ULBMAC.MLB    16P 24-Oct-1998
    CBMAC .MAC    11P 21-Mar-2014    SYSLIB.OBJ    84P 31-Oct-1998
    ULBLIB.OBJ    33P 24-Oct-1998    RSXLIB.OBJ    13P 04-Apr-2016
    RSXLIB.MLB     6P 04-Apr-2016    PASCAL.OBJ    90P 04-Mar-2013
    FORLIB.OBJ   205P 31-Dec-1982    F77OTS.OBJ   135P 22-Apr-2011
    F77CVF.OBJ     4P 30-Apr-1984    F77NER.OBJ     1P 30-Apr-1984
    F77MAP.OBJ    33P 30-Apr-1984    F77EIS.OBJ     3P 30-Apr-1984
    F77RAN.OBJ     2P 30-Apr-1984    F77COM.MSG    14P 20-May-2011
    VDT   .OBJ     8P 31-Oct-1998    MBOOT .BOT     1P 31-Oct-1998
    MBOT16.BOT     1P 31-Oct-1998    MSBOOT.BOT     4P 31-Oct-1998
    MDUP  .MM     72P 31-Oct-1998    MDUP  .MS     72P 31-Oct-1998
    MDUP  .MT     72P 31-Oct-1998    MDUP  .MU     72P 31-Oct-1998
    CUSTOM.TXT    14P 31-Oct-1998    V5NOTE.TXT    36P 31-Oct-1998
    RTEMFB.MAP    39P 06-Apr-2016    RTEMFB.CND     3P 06-Apr-2016
    RTEMFB.SYS   108P 06-Apr-2016    SWAP  .SYS    28P 06-Apr-2016
    BAM   .SYS     7P 06-Apr-2016    LDM   .SYS    11P 06-Apr-2016
    NLM   .SYS     2P 06-Apr-2016    VSM   .SYS     6P 01-Feb-2012
    SLM   .SYS    17P 22-Apr-2013    SDM   .SYS    23P 30-Jan-2012
    RKM   .SYS     4P 15-May-2015    DUM   .SYS     5P 06-Apr-2016
    IND   .SAV    58P 31-Oct-1998    UCL   .DAT     9P 06-Apr-2016
    [свернуть]


    Немного общей информации. RTEM является программой, выполняющейся под RSX-11M, RSX-11M-PLUS, Micro/RSX, VAX/RSX под управлением которой грузится обычный RT-11. Программа устанавливает вектор SST и перехватывает все возможные варианты синхронных прерываний: trap to 4/10, mmu fault (отрабатывается как trap to 4), IOT, TRAP, BPT/T-bit, FP exception, non-RSX EMT. При возникновении SST эмулируется соответствующее прерывание. Таким образом программе под RTEM кроме обычного функционала RT-11 доступны директивы RSX-11. Также устанавливается AST на незапланированный ввод с терминала, эмулирующее прерывание от клавиатуры, а RMON патчится загрузчиком так, чтобы в тех местах где идет работа с железом или определенными сервисами обращение происходило к соответствующим подпрограммам RTEM. Для RT-11 V4 были отдельные исходники системы для RTEM. В RT-11 V5 загрузчик содержит весь необходимый код и включается при определении опции RTE$M=1.

    Связь с RTEM из RT-11 устанавливается через RTEM link area - это вектор ссылок на подпрограммы и данные RTEM. Ссылка на link area надодится по адресу @#250 ($RTELK), адрес @#252 ($RTEID) при этом должен содержать значение 071645 (^RRTE).

    Загрузка в RTEM возможна в двух вариантах:
    1. загрузка с использованием shared и private образов (в этом случае shared образ открывается только для чтения, private образ открывается для чтения и записи, а для файлов shared образа начиная со SWAP.SYS и всех идущих за ним создается временный файл куда эти файлы копируются
    2. загрузка с физического диска с использованием специального драйвера RTEM, эмулирующего драйвер физического устройства (при этом диск может одновременно быть загрузочным диском RT-11 для обычной работы).


    При загрузке RTEM читает первичный загрузчик из драйвера системного диска (VSM.SYS или соответствеющего устройства xxM.SYS), читает вторичный загрузчик из блоков 2-5 файла RTEMFB.SYS, устанавливает адрес подпрограммы чтения из первичного загрузчика и остальные данные для вторичного загрузчика (имя драйвера, номер устройства итд). Сам первичный загрузчик устройства RTEM должен только ругаться, что нельзя грузить RTEM на живой машине и останавливаться. В RTEM этот загрузчик не используется.

    Смещения RTEM link area и имена которые использует BSTRAP.MAC в RT-11 V5.
    Код:
    006    .$CMKT
    010    .$CRTI
    012    .$DARL
    016    .$FATA
    020    .$FORQ
    022    .$FPST
    026    .$GETE
    030    .$GETP
    032    .$GTDA
    036    .$GTPS
    040    .$GTTI
    042    .$IDLP
    044    .$INTN
    050    .$MRKT
    052    .$PTPS
    054    .$RDKM
    060    .$RQSG
    062    .$RSCT
    064    .$RSTT
    066    .$RTIC
    070    .$SPL0
    072    .$SPL7
    120    .$TKS
    122    .$TKB
    124    .$TPS
    126    .$TPB
    140    .EXUSE
    142    .FPPFL
    144    .INTAC
    146    .INTLV
    150    .LKQUE
    152    .PSCLO
    154    .RMONS
    156    .SAVE3
    160    .SYS
    162    .TASKS
    164    .TIKCT
    166    .TTRSE
    170    .$ENSY
    172    .$FORK
    174    .$INTE
    176    .$RMP0
    200    .$RMP1
    202    .$RMP2
    204    .$RMP3
    Структура RTEM link area (кроме вышеписанного), известная на данный момент:
    Код:
    000    Адрес таблицы VS$SET дла устройства VS0:
    	При загрузке системы из shared образа (LB:[1,1]RT11SH.DSK в RSX-11
    	или SYS$LIBRARY:RT11SH.DSK в VMS) по этому смещению располагается таблица:
    		000	VS$SSM	Количество сегментов каталога в shared образе
    		002	VS$PSM	Количество сегментов каталога в private образе
    		004	VS$SDB	Последний блок каталога в shared образе
    		006	VS$SFW	Первый R/W блок shared образа (файл SWAP.SYS)
    		010	VS$SLW	Последний R/W блок (конец shared образа)
    		012	VS$SLB	Последний блок shared образа
    		014	VS$PDB	Последний блок каталога private образа
    		016	VS$PLB	Последний блок private образа
    		020	VS$PHO	Последний открытый сегмент каталога в private образе
    		022	VS$PLU	RSX-11 LUN, назначенный private образу
    		024	VS$SLU	RSX-11 LUN, назначенный shared образу
    		026	VS$TLU	RSX-11 LUN, назначенный временному файлу (копия части
    				shared образа, доступная для записи начиная с SWAP.SYS)
    		030	VS$SIZ	Размер устройства VS0:
    		032	VS$BRO	Смещение для чтения данных (используется загрузчиком)
    		034	VS$PT1	Patch space
    		036	VS$PT2	-"-
    		040	VS$PT3	-"-
    
    002     Адрес подпрограммы, восстанавливающая характеристики терминала и завершающая
    	RTEM
    
    004     Адрес подпрограммы для вызова директив RSX-11, требующих динамической памяти RSX:
    		JSR	R5,@4(Rx)	;ВЫЗОВ ПОДПРОГРАММЫ
    		.WORD	IOSB		;АДРЕС БЛОКА СОСТОЯНИЯ QIO или 0 если нет/не QIO
    		DIR$	...		;ВЫПОЛНЕНИЕ ДИРЕКТИВЫ RSX-11
    		CALL	@(SP)+		;ВЫЗОВ СОПРОГРАММЫ (C БИТ НА ВХОДЕ ДОЛЖЕН ОТРАЖАТЬ
    					;СТАТУС ВЫПОЛНЕНИЯ ДИРЕКТИВЫ
    	Подпрограмма сохраняет @#46 ($DSW), дает выполнить директиву (и прочий код для нее),
    	в случае ошибки вызванной нехваткой динамической памяти ждет важного события в RSX-11
    	директивой WSIG$S и делает повтор вызова директивы. Восстанавливает @#46.
    	При возврате случае успеха C=0, в случае ошибки C=1.
    
    014     Адрес подпрограммы поиска RSX-11 LUN, назначенного RT-11 устройству:
    		MOV	#^Rddn,R0	;ИМЯ УСТРОЙСТВА
    		CALL	@14(Rx)		;ВЫЗОВ ПОДПРОГРАММЫ
    	На выходе C=0 если LUN найден (в этом случае R0 содержит LUN) или C=1
    	в случае ошибки
    
    024     Адрес подпрограммы получения/обновления даты-времени.
    		CALL	@24(Rx)
    	На выходе R0 содержит дату в формате RT-11, R1 содержит $DSW от результата
    	выполнения GTIM$ (зачем?), R5 указывает на буфер GTIM + G.TIHR. Адрес буфера берется
    	из смещения 106 link area.
    
    034     Адрес подпрограммы резервирования RSX-11 LUN для присоединия устройства.
    		MOV	#^Rddn,R0	;ИМЯ УСТРОЙСТВА
    		MOV	#x,R1		;ЕСЛИ R1=^RRTE - ПОСТОЯННОЕ ПРИСОЕДИНЕНИЕ
    					;В ПРОТИВНОМ СЛУЧАЕ ПРИСОЕДИНЕНИЕ ДЛЯ RT-11
    					;JOB ДО ВЫХОДА
    		CALL	@34(Rx)		;ВЫЗОВ ПОДПРОГРАММЫ
    	На выходе C=0 в случае успеха, C=1 в случае ошибки.
    
    046     Адрес подпрограммы прерывания ввода-вывода на RSX-11 LUN.
    		MOV	#LUN,R4		;RSX-11 LUN
    		CALL	@46(Rx)		;ВЫЗОВ ПОДПРОГРАММЫ
    	На выходе C=0 в случае успеха, C=1 в случае ошибки.
    
    056     Адрес подпрограммы отключения RSX-11 LUN и назначение ему SY0: (устройство по умолчанию).
    		MOV	#x,R1		;ЕСЛИ R1=^RRTE БЕЗУСЛОВНО ОТКЛЮЧИТЬ LUN
    					;В ПРОТИВНОМ СЛУЧАЕ R1 ДОЛЖЕН СОДЕРЖАТЬ НОМЕР
    					;ЗАДАНИЯ RT-11 УМНОЖЕННЫЙ НА 2 + 1.
    	На выходе C=0 в случае успеха, C=1 в случае ошибки.
    
    074     Адрес DPB для директивы QIOW$
    076     Адрес DPB для директивы ESXT$
    100	Адрес DPB для QIOW$ с функцией IO.KIL
    102	Адрес DPB для QIOW$ с функцией IO.ATA для TI:
    106	Адрес 8-словного буфера для GTIM$
    110	Некая таблица системных параметров
    		000	- флаги
    				4	- загружен с shared образа
    		030	- максимальный LUN который можно использовать (19. для того RTEM что есть)
    	
    114	Адрес таблицы LUN. На каждый LUN выделяется 2 слова. Первое слово содержит биты состояния,
    	второе - имя устройства RT-11 в RADIX-50 или 0 для файла. Биты состояния:
    		100000 - устройство только для чтения
    		 40000 - LUN назначен устройству/файлу
    		 10000 - shared образ (?)
    		   200 - устройство RTEM (?)
    		 0-177 - номер задания RT-11 + 1
    Пара слов о драйверах RTEM-11, используемых для эмуляции физических устройств.
    В общем случае, это обычные драйвера RT-11, только вместо обращений к регистрам устройств
    нужно вызывать директиву QIOW$ для соответствующего устройству LUN и вместо классического прерывания обрабатывать AST (не забывая, что верх стека при этом содержит адрес блока состояния I/O директивы QIOW$).

    Драйвер должен сконвертировать номер устройства в имя в RADIX-50 вида ^RRK3 и вызвать подпрограмму, адрес которой записан в RTEM lik area по смещению 14 для поиска LUN, назначенного данному устройству. Если LUN найден - нужно вызывать директиву QIOW$, используя в качестве RSX-11 event flag номер, совпадающий с LUN, указав в качестве AST подпрограммы метку ddINT драйвера.

    Подпрограмма обработки прерываний драйвера RTEM (ddINT) вместо использования .DRAST должна сделать следующее:
    Код:
    	RETURN			;ИЛИ BR НА ПОДПРОГРАММУ ОТМЕНЫ I/O (ВЫЗОВ QIOW$ IO.KIL)
    ddINT:	TST	(SP)+		;УБРАТЬ ИЗ СТЕКА АДРЕС БЛОКА СОСТОЯНИЯ I/O
    	JSR	R5,@$INPTR	;ВЫЗВАТЬ ПОДПРОГРАММУ $INTEN
    	.WORD	PRI*40		;ПРИОРИТЕТ ПРОЦЕССОРА (ДЛЯ RTEM ОСОБОГО ФУНКЦИОНАЛА НЕ НЕСЕТ,
    				;ОДНАКО ЕСЛИ ОН БУДЕТ БОЛЬШЕ 4, БУДЕТ ЗАБЛОКИРОВАНА ОБРАБОТКА
    				;AST ДО ВОЗВРАТА ИЗ ПОДПРОГРАММЫ.
    Загрузчик устройства RTEM должен (как уже писалось выше) просто ругаться на невозможность загрузить RTEM на живом железе. Подпрограмма чтения должна использовать DPB директивы QIOW$ по адресу, записанному в @#772 и подпрограмму выполнения директивы по адресу, записанному в @#774.
    Также в загрузчике должен быть подготовлен код для печати сообщений ошибок загрузки в RTEM. Пример загрузчика для драйвера RK в RTEM:
    Код:
            .DRBOT  RK,BOOT1,READ
            .=RKBOOT+40
    BOOT1:  JMP     @#BOOT-RKBOOT
    
            .=RKBOOT+254
    READ:   MOV     R0,R3                   ;SAVE BLOCK NUMBER
            MOV     RKBOOT+772,R0           ;GET ADDRESS OF QIOW DPB
            MOV     R2,Q.IOPL(R0)           ;SET BUFFER ADDRESS
            ASL     R1                      ;CONVERT WORD COUNT TO BYTES
            MOV     R1,Q.IOPL+2(R0)         ;SET BYTE COUNT
            MOV     R3,Q.IOPL+10(R0)        ;SET BLOCK NUMBER
            JMP     @RKBOOT+774             ;PERFORM I/O
    
    BOOT:   JSR     R0,BPRINT               ;PRINT ERROR MESSAGE AND HALT
            .ASCII  <CR><0><LF><0>
            .ASCII  /?BOOT-U-Cannot boot RTEM standalone/<CR><LF><LF><200>
    
    .ASSUME . LE RKBOOT+550
    
            .=RKBOOT+550
    BPRINT: TSTB    @#TPS                   ;TERMINAL PRINTER READY?
            BPL     BPRINT                  ;PL = NO
            MOVB    (R0)+,@#TPB             ;PRINT CHARACTER
            BPL     BPRINT                  ;PL = MORE TO PRINT
    10$:    HALT                            ;HALT PROCESSOR
            BR      10$                     ;
    
    .ASSUME . LE RKBOOT+570
    
            .=RKBOOT+570
            JMP     @#BIOERR                ;RTEM BIOERR ENTRY
            .=RKBOOT+576
            JMP     @#REPORT                ;RTEM REPORT ENTRY
            .DREND  RK
    В этом коде загрузчика есть некоторые неточности: с RTEMовских точек входа BIOERR и REPORT нужно отрабатывать вывод средствами RSX, а не ссылаться на аналогичные точки для обычной загрузки. Позже нарисую как должно быть.

    - - - Добавлено - - -

    Ну вот, вроде основное закончил. Дальше можно мучить тему. Есть еще кое-какая техническая информация вроде формата shared образа (озвучивал ранее кажется в теме про Э85 и DEC Pro), но она не так существенна. Чуть позже напишу о патчах для RT-11 V5.7 которые пришлось наложить, чтобы система нормально грузилась под RTEM (некоторые ошибки тянулись с самого RT-11 V5.0, некоторые (поддержка расширенных unit # на устройстве загрузки) просто не предусматривались ибо RTEM был заброшен раньше RT-11 V5.5, некоторые возможно вызвыны использованием старого RTEM - другого-то пока нет [хотя теперь можно подумать и о написании своего]), но исправления всяко не помешают даже если когда и найдем более поздний.
    Последний раз редактировалось form; 11.04.2016 в 05:46.
    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

    подумываю избавиться от всего этого...

  2. Эти 2 пользователя(ей) поблагодарили form за это полезное сообщение:
    anasana (08.04.2016), hobot (09.04.2016)

  3. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. micro-CPU на vhdl, verilog
    от bigral в разделе Для начинающих
    Ответов: 14
    Последнее: 17.04.2015, 00:39
  2. Micro INC
    от rasmer в разделе Игры
    Ответов: 2
    Последнее: 14.12.2014, 22:54
  3. BBC Micro Live
    от AM в разделе Разное
    Ответов: 1
    Последнее: 21.04.2013, 11:54
  4. Orizon-Micro
    от lerkom в разделе Unsorted
    Ответов: 34
    Последнее: 18.10.2012, 14:45
  5. BBC micro
    от Addison в разделе Зарубежные компьютеры
    Ответов: 59
    Последнее: 13.11.2011, 14:54

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •