Важная информация

User Tag List

Страница 30 из 112 ПерваяПервая ... 262728293031323334 ... ПоследняяПоследняя
Показано с 291 по 300 из 1114

Тема: Эмулятор УКНЦ - UKNCBTL

  1. #291
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,777
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    61 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    у 1801ВМ2 дела обстоят именно так
    Тогда это существенное отличие от ВМ1.

    У 1801ВМ1 дела обстоят так:

    ? Patron - 14 февраля 23:51
    А что насчёт поведения 1801ВМ1 при обработке прерывания зависания в USER-моде с несуществующим адресом в ячейке 04 ?
    Если при этом не произойдёт переход в HALT-моду, то процессор войдёт в цикл бесконечного зависания.

    ? anonymous - 15 февраля 00:05
    Да, пока указатель стека не затрет всю память и не перейдет через 0, после чего возникнет двойная ошибка шины с выходом в пульт, но данные в памяти ниже первоначального значения указателя стека будут утрачены.

    ? anonymous - 15 февраля 00:18
    @4/002016 177000
    000006/000000 340
    @R6/000416 4
    @1000/001000 5737
    001002/001002 177000
    001004/001004 0
    @1000G
    177002
    @M000013
    @R6/177774
    @0/001004
    000002/000340
    000004/177000
    @
    Коды команды M:
    х0 - переключатель пульт, инструкция HALT
    х1 - ошибка передачи вектора
    х2 - ошибка регенерации озу, в ДВК не реализовано
    х3 - двойное зависание
    х4 - ошибка микрокода процессора, в ДВК не реализовано

  2. #292
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,208
    Спасибо Благодарностей отдано 
    346
    Спасибо Благодарностей получено 
    607
    Поблагодарили
    399 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Тогда это существенное отличие от ВМ1.

    У 1801ВМ1 дела обстоят так:
    По всей видимости у 1801ВМ1 двойное зависание происходит только если возникло зависание во время обработки 4-го вектора, т.е. не удалось положить в стек PC и PS прерываемого процесса. Удалось положить - сбрасываем флаг зависания.

  3. #293
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,777
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    61 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    По всей видимости у 1801ВМ1 двойное зависание происходит только если возникло зависание во время обработки 4-го вектора, т.е. не удалось положить в стек PC и PS прерываемого процесса. Удалось положить - сбрасываем флаг зависания.
    Думаю, проверка номера вектора не входит в логику обработки двойного зависания ни в ВМ1, ни в ВМ2.

    Судя по всему, в ВМ1 двойное зависание означает просто два таймаута шины подряд, а в ВМ2 использован более продвинутый алгоритм, дополнительно учитывающий последовательные зависания при выборке команд.

  4. #294
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,208
    Спасибо Благодарностей отдано 
    346
    Спасибо Благодарностей получено 
    607
    Поблагодарили
    399 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Думаю, проверка номера вектора не входит в логику обработки двойного зависания ни в ВМ1, ни в ВМ2.

    Судя по всему, в ВМ1 двойное зависание означает просто два таймаута шины подряд, а в ВМ2 использован более продвинутый алгоритм, дополнительно учитывающий последовательные зависания при выборке команд.
    А вот по всей видимости входит. Команды JMP Rx и JSR Rx также трапаются по 4-му вектору. Но алгоритм обработки на ситуацию двойного зависания другой.

    Если в 4 и 6 занести 2000 и 200, в R6 - 170000. Сперва по адресу 1000 занесем команду TST @#160000. При исполнении R6 будет равен 167774. Т.е. при исполнении команды произошло зависание, произошло оно и при занесении параметров в стек. В итоге - двойное зависание. Кстати у ВМ2 указатель стека всегда уменьшается на 4. Если по адресу 1000 записать JMP R0 и исполнить, то будет двойное зависание и R6 уже будет равен 167770. Т.е. при исполнении команды произойдет прерывание по 4-му вектору, возникает зависание при заносе параметров в стек. Здесь снова прерывание по 4-му вектору, но при очередном занесении в стек - уже двойное зависание.
    При этом между зависаниями было вполне успешное чтение 4-го вектора. Так что проще задействовать какой-нибудь триггер. Произошло зависание - установили. У ВМ2 прочли код команды успешно - сбросили.

    Есть еще один тест - а если произошло зависание при чтении 4-го вектора? На МС1201.01 вроде можно отключать банки памяти, но если только плата запуститься с отключенным нулевым банком.

  5. #295
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,777
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    61 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Если по адресу 1000 записать JMP R0 и исполнить, то будет двойное зависание и R6 уже будет равен 167770. Т.е. при исполнении команды произойдет прерывание по 4-му вектору, возникает зависание при заносе параметров в стек. Здесь снова прерывание по 4-му вектору, но при очередном занесении в стек - уже двойное зависание.
    При этом между зависаниями было вполне успешное чтение 4-го вектора.
    И аппаратное прерывание, и прерывание по резервному коду, и любое командное прерывание (типа EMT, IOT и т.п.) даст при плохом стеке точно такой же эффект даже на ВМ1. Чтение вектора ни на первом, ни на втором шаге процессор выполнить не успевает.

    Но похоже, что действительно у ВМ2 за формирование признака двойного зависания отвечает не контроллер шины (как у ВМ1), а блок прерываний. Ведь контроллер шины не может отличить циклы DATI при чтении ячеек 04 и 06 от таких же циклов чтения при выборке команды.

    Есть еще один тест - а если произошло зависание при чтении 4-го вектора? На МС1201.01 вроде можно отключать банки памяти, но если только плата запустится с отключенным нулевым банком.
    Мне такой тест организовать пока не удалось. Было бы весьма интересно, если бы кто-то такое осуществил.
    Последний раз редактировалось Patron; 09.10.2011 в 03:28.

  6. #296
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,208
    Спасибо Благодарностей отдано 
    346
    Спасибо Благодарностей получено 
    607
    Поблагодарили
    399 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Но похоже, что действительно у ВМ2 за формирование признака двойного зависания отвечает не контроллер шины (как у ВМ1), а блок прерываний. Ведь контроллер шины не может отличить циклы DATI при чтении ячеек 04 и 06 от таких же циклов чтения при выборке команды.
    Тут уж сложно сказать, кто за что отвечает. Возможно в ВМ1 при обращении к шине имеется счетчик зависаний, и если два зависания подряд - то тогда двойное зависание. В ВМ2 это не так, при хорошем стеке двойное зависание может быть и при неуспешном чтении команды.
    У ВМ2 есть еще особенность - при заносе в стек PC и PS указатель стека всегда уменьшается на 4, независимо от того, удалось занести параметры в стек или нет. Делал даже опыты со сначением R6, равным 160002. Естественно в 160000 занести не удалось, прерывание по зависанию. Но после успешного прерывания по вектору 4 указатель стека был равен 157772. Т.е. данные прерванного процесса по зависанию были успешно занесены в ячейки 157772 и 157774. Ячейка 157776 оставалась нетронутой. Как с этим обстоят дела на ВМ1?

  7. #297
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,777
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    61 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Как с этим обстоят дела на ВМ1?
    Так же, при любой причине прерывания.

    Interrupts Test #1

    BIS #100,@#TTPS
    MOV #160004,SP
    >>> Trap to 004 <<<
    SP/157774

    MOV #160004,SP
    IOT
    >>> Trap to 004 <<<
    SP/157774

    MOV #160004,SP
    MFPT
    >>> Trap to 004 <<<
    SP/157774

    Program completed.
    Кстати, в начале теста любопытно, что при установке бита разрешения прерываний в регистре статуса любого готового устройства - прерывание происходит строго через одну команду при любом значении тактовой частоты процессора.

    Исходник теста прилагается.

    Если в конфигурации тестируемого компьютера нет порта терминала или его адрес отличается от используемого в тесте - нужно:

    1. Изменить в исходнике константу TTPS (при отсутствии порта терминала - на адрес регистра статуса любого устройства, в котором после включения питания устанавливается бит готовности 0200 ):
    Код:
    ;
    ;	INTT1.MAC  -  Interrupts Test #1
    ;
    ;===============================================
    
    	.MCall	.Exit
    
    	TTKS  =:  0177560
    	TTKB  =:  0177562
    	TTPS  =:  0177564
    	TTPB  =:  0177566
    2. При отсутствии порта терминала - скорректировать подпрограмму StrOut ( вывод строки ASCIZ с адресом в R0 без использования прерываний ):
    Код:
    StrOut:
    	TstB	@#TTPS              ; Ждать готовности терминала.
    	BPl	.-4.
    	MovB	(R0)+,R1
    	BEq	1$
    	BMi	2$
    	MovB	R1, @#TTPB          ; Вывести байт.
    	Br	StrOut
    1$:
    	MovB	#015,@#TTPB         ; Вывести <CR>
    	TstB	@#TTPS
    	BPl	.-4.
    	MovB	#012,@#TTPB         ; Вывести <LF>
    	TstB	@#TTPS
    	BPl	.-4.
    2$:
    	Return
    Вложения Вложения
    • Тип файла: zip INTT1.ZIP (1.8 Кб, Просмотров: 151)

  8. #298
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,208
    Спасибо Благодарностей отдано 
    346
    Спасибо Благодарностей получено 
    607
    Поблагодарили
    399 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Кстати, в начале теста любопытно, что при установке бита разрешения прерываний в регистре статуса любого готового устройства - прерывание происходит строго через одну команду при любом значении тактовой частоты процессора.
    Да, да! Замечал такое. Из-за этого можно схватить зависание при приеме АВП. Тестировал, добился. Скриншот прилагается.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	UK_2.jpg 
Просмотров:	194 
Размер:	85.1 Кб 
ID:	29824  

  9. #299
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,560
    Спасибо Благодарностей отдано 
    1,223
    Спасибо Благодарностей получено 
    1,754
    Поблагодарили
    683 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    У ВМ2 есть еще особенность - при заносе в стек PC и PS указатель стека всегда уменьшается на 4, независимо от того, удалось занести параметры в стек или нет.
    Это говорит о том, что прерывание происходит только в конце последовательности сохранения регистров в стек. Т.е. занесли первое слово, установился флажок зависания, потом занесли второе слово, и только в конце этой последовательности может произойти прерывание.

  10. #300
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,208
    Спасибо Благодарностей отдано 
    346
    Спасибо Благодарностей получено 
    607
    Поблагодарили
    399 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Это говорит о том, что прерывание происходит только в конце последовательности сохранения регистров в стек. Т.е. занесли первое слово, установился флажок зависания, потом занесли второе слово, и только в конце этой последовательности может произойти прерывание.
    Titus, внимательно почитайте мой пост. Там говориться о том, что второе слово не заносится. Т.е. сначала SP=160002, уменьшается на 2, заносится в стек первое слово (в 160000). Здесь происходит зависание. Несмотря на это, SP еще уменьшается на 2, и хотя в 157776 уже можно занести, но второе слово не заносится в стек.

Страница 30 из 112 ПерваяПервая ... 262728293031323334 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Эмулятор УКНЦ - EmuStudio
    от Titus в разделе Эмуляторы отечественных компьютеров
    Ответов: 1191
    Последнее: 15.02.2024, 13:32
  2. Ответов: 231
    Последнее: 21.03.2022, 07:54
  3. Эмулятор УКНЦ на JavaScript
    от nzeemin в разделе Эмуляторы отечественных компьютеров
    Ответов: 4
    Последнее: 27.04.2021, 14:26
  4. УКНЦ и Gotec Flash Floppy эмулятор
    от Ynicky в разделе ДВК, УКНЦ
    Ответов: 10
    Последнее: 10.09.2019, 04:34
  5. Продам МС5310 блок дисководов к УКНЦ+КМД УКНЦ
    от Mad Killer/PG в разделе Барахолка (архив)
    Ответов: 7
    Последнее: 19.03.2012, 11:27

Ваши права

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