User Tag List

Страница 36 из 227 ПерваяПервая ... 323334353637383940 ... ПоследняяПоследняя
Показано с 351 по 360 из 2264

Тема: Особенности процессоров и устройств архитектуры PDP-11. Тесты. Диагностика.

  1. #351

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vamos Посмотреть сообщение
    Понятно, в коде UKNCBTL уже где-то используются VIRQ 7 и 9, это теперь весь код перелопачивать?
    Очереди в коде две, т.к. два процессора. В ПП действительно 7 и 9 очередь занята приемниками каналов 1 и 2, но это ПП, а не ЦП.

  2. #352

    Регистрация
    05.03.2010
    Адрес
    Санкт-Петербург
    Сообщений
    781
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Patron, извините за оффтоп

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


    Код:
    void CFirstMemoryController::SetPortWord(WORD address, WORD word)
    {
        switch (address) {
            case 0176574:  // Стык С2: Регистр состояния источника
            case 0176575:  // Bits 0,2,6
                if(((m_Port176574 & 0300) == 0200) && (word & 0100))
                {
                    m_pCPU->InterruptVIRQ(8, 0374);
                }
                m_Port176574 = (m_Port176574 & ~0105) | (word & 0105); 
                break;
            case 0176576:  // Стык С2: Регистр данных источника
            case 0176577:  // нижние 8 бит доступны по записи
                m_Port176576 = word & 0xff;
                m_Port176574 &= ~128;  // Reset bit 7 (Ready)
                break;
        }
    }
    Это должно быть именно в этой функции кода или можно поместить вот сюда
    Код:
    if (m_SerialInCallback != NULL && frameticks % 416 == 0)
    {
        CFirstMemoryController* pMemCtl = (CFirstMemoryController*) m_pFirstMemCtl;
        if ((pMemCtl->m_Port176574 & 004) == 0)  // Not loopback?
        {
            BYTE b;
            if (m_SerialInCallback(&b))
            {
                if (pMemCtl->SerialInput(b) && (pMemCtl->m_Port176570 & 0100))
                    m_pCPU->InterruptVIRQ(3, 0370);
            }
        }
    }
    А то там код и так раскидан по разным местам.
    [свернуть]

  3. #353

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vamos Посмотреть сообщение
    Это должно быть именно в этой функции кода
    Эмулятор при записи в регистры устройств вызывает функцию void CFirstMemoryController::SetPortWord(WORD address, WORD word) - туда и надо вносить изменения.

  4. #354

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для реализации прерываний портов СА и С2 нужно модифицировать не только функцию void CFirstMemoryController::SetPortWord(WORD address, WORD word), но и void CFirstMemoryController::SetPortByte(WORD address, BYTE byte), которая в данный момент выглядит довольно бледно.

    См. ЗДЕСЬ.

  5. #355

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от form Посмотреть сообщение
    Посмотрел тех доку на TU58.

    В доке рекомендуется такой порядок инициализации:
    • включить BREAK
    • послать два нуля
    • когда появится готовность выключить BREAK
    • послать два INITа (4)
    Чувствую, что последовательный порт нас ещё удивит..

    Вот адаптированный код инициализации TU58 из драйвера DD.SYS:

    Код:
    	MOV	#177777, @#TPB
    	BIS	#<CS$INT!CS$BRK>, @#TPS
    	TSTB	@#TPS
    	BPL	.-4.
    	MOV	#177777, @#TPB
    	TSTB	@#TPS
    	BPL	.-4.
    	BIC	#CS$BRK,@#TPS
    	MOV	#4, @#TPB
    	TSTB	@#TPS
    	BPL	.-4.
    	MOV	#4, @#TPB
    	TSTB	@#TPS
    	BPL	.-4.
    	BIC	#CS$INT,@#TPS
    В большинстве эмуляторов этот код посылает 377, 0, 4, 4. Тогда как на реальном порту он должен посылать 0+FrameError, 4, 4. Порт не может послать в линию отмену FrameError - принимающая сторона снимает признак FrameError после приёма полноценного байта, а признак Break ( в тех портах, где он определяется отдельно ) снимает после приёма первого бита "1" ( перевода линии в состояние IDLE ).

    Только вчера я понял, почему код инициализации TU58 из DD.SYS в реальности должен посылать ( есть смысл это проверить ) не 4, а лишь 3 байта ( 0+FrameError, 4, 4 ) - BREAK снимается во время передачи стартового бита второго байта 377, поэтому весь последующий байт распознаётся принимающим портом не как байт, а как перевод линии в состояние IDLE, предшествующее стартовому биту очередной посылки.

    Кстати, если во втором байте передать хотя бы один 0-й бит, то он (скорее всего) будет распознан как стартовый с весьма оригинальными последствиями в зависимости от его позиции ( если установленный в 1 бит посылки байта 04 придётся на место стопового - будут переданы два фиктивных байта, иначе возникнет переходящая ошибка FrameErrror и только последний байт 04 будет нормально принят, хотя и с фиктивным значением ).
    Последний раз редактировалось Patron; 05.02.2013 в 14:36.

  6. #356

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    В большинстве эмуляторов.
    И в том нет ничего удивительного - мне в принципе известны только два эмулятора которые умеют работать с живым портом и при этом в принципе отрабатывают BREAK
    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

  7. #357

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если я правильно понимаю суть работы последовательного порта, то при работе без бита паритета возможна передача байтов без FrameError при несовпадающих скоростях передачи и приёма.

    Если принимать на скорости 9600, то при передаче байта 0377 ( 11111111 ) будет принято (в зависимости от скорости передачи) следующее:

    1. 9600 - 11111111 ( 0377 )
    2. 4800 - 11111110 ( 0376 )
    3. 2400 - 11111000 ( 0370 )
    4. 1200 - 10000000 ( 0200 )

    Так как стартовый бит при меньших скоростях передачи будет "длиннее", а передаваемые единицы сыграют роль недостающих битов байта и стопового бита.

  8. #358

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Нарисовал небольшую темплату для написания тестов с регистрами терминала, работающих как в однотерминальном так и в многотерминальном мониторе.

    Здесь нет переключения в кернел режим, но в данном примере он и не нужен.

    Код:
    	.TITLE	MTATT
    	.IDENT	/V01.00/
    
    TKS	==	176500				;CSR ТЕСТИРУЕМОГО УСТРОЙСТВА
    
    $JSX	==	4				;РАСШИРЕННОЕ СЛОВО СОСТОЯНИ ЗАДАНИЯ
    NOVBG$	==	100				;БИТ ЗАПРЕТА VBGEXE
    
    $SYPTR	==	54				;УКАЗАТЕЛЬ НА RMON
    
    $CNFG1	==	300				;СМЕЩЕНИЕ СЛОВА КОНФИГУРАЦИИ
    FJOB$	==	200				;БИТ ЗАГРУЗКИ FOREGROUND
    
    $SYSGE	==	372				;СМЕЩЕНИЕ СЛОВА ГЕНЕРАЦИИ
    MTTY$	==	20000				;БИТ МНОГОТЕРМИНАЛЬНОЙ ПОДДЕРЖКИ
    
    MST.1T	==	0				;СМЕЩЕНИЕ ДО ПЕРВОГО TCB
    MST.CT	==	2				;СМЕЩЕНИЕ ДО TCB ПРОГРАММЫ
    MST.LU	==	4				;МАКСИМАЛЬНЫЙ НОМЕР ЛИНИИ
    MST.ST	==	6				;РАЗМЕР TCB
    
    T.CSR	==	16				;АДРЕС CSR ТЕРМИНАЛА
    
    	.ASECT					;ЗАПРЕТ ЗАПУСКА ПОД VBGEXE
    	.=$JSX					;
    	.WORD	NOVBG$				;
    	.PSECT					;
    
    	.MCALL	.EXIT,.MTSTAT,.PRINT		;МАКРОВЫЗОВЫ
    
    $TKS::	.WORD	TKS				;АДРЕС CSR (ЧТОБЫ ЛЕГЧЕ БЫЛО МЕНЯТЬ
    						;БЕЗ ПЕРЕСБОРКИ)
    
    START::	MOV	@#$SYPTR,R3			;ПОЛУЧАЕМ АДРЕС RMON
    
    ; ПРОВЕРЯЕМ НЕТ ЛИ В ПАМЯТИ FOREGROUND/SYSTEM ПРОГРАММЫ.
    ; ПРИ НАЛИЧИИ ТАКОЙ ПРОГРАММЫ В ПАМЯТИ ЖЕЛЕЗО ЛУЧШЕ НЕ ТРОГАТЬ
    ; ЧТОБЫ ПОТОМ НЕ БЫЛО МУЧИТЕЛЬНО БОЛЬНО ЗА БЕСЦЕЛЬНО ПОТЕРЯННОЕ
    ; СОДЕРЖИМОЕ ДИСКА...
    
    	TSTB	$CNFG1(R3)			;FOREGROUND LOADED?
    	BPL	10$				;НЕТ
    	.PRINT	#EFJOB				;ДА, ОШИБКА
    	.EXIT					;ВЫХОД
    
    10$:	MOV	$TKS,R5				;ПОЛУЧАЕМ АДРЕС CSR
    	BIT	#MTTY$,$SYSGE(R3)		;МНОГОТЕРМИНАЛЬНАЯ СИСТЕМА?
    	BEQ	50$				;НЕТ
    	.MTSTAT	#AREA,#TSTAT			;ДА, ПОЛУЧАЕМ ИНФОРМАЦИЮ
    	BCC	20$				;ОК
    	.PRINT	#EMTST				;ОШИБКА (ПО ИДЕЕ НЕВОЗМОЖНА)
    	.EXIT					;ВЫХОД
    
    20$:	MOV	R3,R4				;ПОЛУЧАЕМ АДРЕС
    	ADD	TSTAT+MST.1T,R4			;...ПЕРВОГО TCB
    	MOV	TSTAT+MST.LU,R1			;ПОЛУЧАЕМ КОЛИЧЕСТВО
    	INC	R1				;...ЛИНИЙ
    30$:	CMP	R5,T.CSR(R4)			;ИЩЕМ СОВПАДЕНИЕ
    	BNE	40$				;
    	MOV	#FAKE,T.CSR(R4)			;ПОДСТАВЛЯЕМ ЛЕВЫЙ CSR
    	BR	50$				;
    
    40$:	ADD	TSTAT+MST.ST,R4			;ПЕРЕХОДИМ К СЛЕДУЮЩЕМУ
    	SOB	R1,30$				;...TCB
    	CLR	R4				;СОВПАДЕНИЯ НЕ НАЙДЕНО
    
    50$:	CLR	@R5				;ЗАПРЕЩАЕМ ПРЕРЫВАНИЯ
    
    60$:	TSTB	@R5				;O
    	BPL	.-2				; F   T
    	MOVB	2(R5),R0			;  F   E
    	CMPB	#'C-100,R0			;   L   R
    	BEQ	70$				;    I   M
    	TSTB	4(R5)				;     N   I
    	BPL	.-4				;      E   N
    	MOVB	R0,6(R5)			;           A
    	BR	60$				;            L
    
    70$:	TST	R4				;БЫЛ НАЙДЕН TCB?
    	BEQ	80$				;НЕТ
    	MOV	R5,T.CSR(R4)			;ДА. ВОССТАНАВЛИВАЕМ CSR
    80$:	.EXIT					;ВЫХОДИМ
    
    FAKE::	.BLKW	4				;ПОДСТАВНЫЕ РЕГИСТРЫ
    AREA::	.BLKW	3				;EMT AREA
    TSTAT::	.BLKW	8.				;БЛОК ИНФОРМАЦИИ
    
    EFJOB:	.ASCIZ	/?MTATT-F-Foreground loaded/
    EMTST:	.ASCIZ	/?MTATT-F-MTSTAT failed/
    
    	.END	START


    ---------- Post added at 17:29 ---------- Previous post was at 17:28 ----------

    Цитата Сообщение от Patron Посмотреть сообщение
    Если принимать на скорости 9600, то при передаче байта 0377 ( 11111111 ) будет принято
    Да.

    ---------- Post added at 17:39 ---------- Previous post was at 17:29 ----------

    Потерялся CLR R4 один в проге выше, а редактировать в этом кривофоруме никак не хочет. Ну да по смыслу понятно
    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

  9. #359

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    79 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для тестирования работы последовательных портов с сигналом BREAK - мною написаны тесты BRKT1 и BRKT2. Оба требуют наличия с другой стороны тестируемой линии специального тестового варианта сервера HX Server, который умеет по запросу клиента посылать в линию сигнал BREAK, а также превращает получаемые в порту сигналы в текстовые сообщения.

    Для проведения тестов нужно запустить прилагаемый HX Server на порту PC, подключенному к УКНЦ, ДВК или PDP-11, а на другой стороне - запускать программы BRKT1.SAV и BRKT2.SAV. Если адрес и вектор используемого со стороны PDP-11 порта отличаются от адреса и вектора порта С2 УКНЦ - программы следует перекомпилировать, указав в исходниках нужные значения.

    Код:
    TKS	=: 176570
    TKINT	=: 370
    
    TTKS	=: 176570
    Результаты тестирования сервер выводит в окно Teletype и сохраняет в файле Teletype.log.

    Запускать тесты на УКНЦ можно загрузившись с HX - на этот случай в дистрибутиве тестового сервера уже находится образ BRKT1_&_BRKT2.DSK, подключенный к приводу HX1:

    ...
    Вложения Вложения
    Последний раз редактировалось Patron; 23.09.2014 в 14:24.

  10. #360

    Регистрация
    27.05.2009
    Адрес
    СССР, Новосибирск
    Сообщений
    5,850
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    289
    Поблагодарили
    233 сообщений
    Mentioned
    30 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Для тестирования работы последовательных портов с сигналом BREAK
    Запустил на своем нотебяке с USB<>2COM от St Lab.
    Завтра попробую приличный комп проверить.

    Код:
    ===================================
    BRKT1 - Test COM-port BREAK Part #1
    ===================================
    
    Test 1: Ask HX Server for 0.3 ms BREAK..
    Recived bytes: «376»
    
    Test 2: Ask HX Server for 1 ms BREAK..
    Recived bytes: «200»
    
    Test 3: Ask HX Server for 2 ms BREAK..
    Recived bytes: «000»
    
    Test 4: Ask HX Server for 20 ms BREAK..
    Recived bytes: «000»
    
    Test 5: Ask HX Server for 50 ms BREAK..
    Recived bytes: «000»
    
    
    ===================================
    BRKT2 - Test COM-port BREAK Part #2
    ===================================
    
    Test 1: Send SHORT BREAK..
    «377»
    
    Test 2: Send 1 byte BREAK..
    «000»_Break__Break_EAK..
    
    
    Test 3: Send 2 byte BREAK..
    _Break_«000»
    
    Test 4: Send 3 byte BREAK..
    «000»_Break_
    
    Test 5: Send 10 byte BREAK..
    _Break__Break_«000»
    
    
    Test 6: Send 20 byte BREAK..
    «000»_Break__Break_
    
    
    Test 7: Send Bad Frame 1 ..
    «000»_Break_«216»«004»
    
    Test 8: Send Bad Frame 2 ..
    _Break__Break_«000»
    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

Страница 36 из 227 ПерваяПервая ... 323334353637383940 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Тесты ВМ1
    от nzeemin в разделе БК-0010/0011
    Ответов: 90
    Последнее: 05.10.2018, 12:24
  2. Диагностика
    от dk_spb в разделе Корвет
    Ответов: 31
    Последнее: 21.07.2017, 23:52
  3. Проблема двух процессоров.
    от Mikka_A в разделе Несортированное железо
    Ответов: 21
    Последнее: 28.11.2006, 17:04

Ваши права

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