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

User Tag List

Страница 31 из 87 ПерваяПервая ... 272829303132333435 ... ПоследняяПоследняя
Показано с 301 по 310 из 861

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

  1. #301
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    9,972
    Благодарностей: 3445
    Mentioned
    2 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

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

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

  3. #302
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,628
    Благодарностей: 2758
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Это говорит о том, что прерывание происходит только в конце последовательности сохранения регистров в стек. Т.е. занесли первое слово, установился флажок зависания, потом занесли второе слово, и только в конце этой последовательности может произойти прерывание.
    Чтобы точно определить, заказывает ли блок прерываний второй цикл DATO ( для записи в стек содержимого PC ) сразу после неудачи записи в стек содержимого PSW или просто уменьшает SP ещё на 2 - можно осуществить следующий тест:
    Код:
    	Mov	#160002,SP
    	CLR	@#157776
    	MFPT
    Если по завершении теста в ячейке 0157776 окажется записан не 0, а PC из первого прерывания - значит при входе в прерывание блок прерываний выполняет два последовательных цикла DATO без реакции на возможное зависание в первом из этих двух циклов.

    Причём, если это окажется справедливо не только для ВМ2, но и для ВМ1 - то это будет означать, что два последовательных зависания при входе в прерывание с плохим стеком не формируют признака двойного зависания ( как если бы блок прерываний не заказывал второй цикл DATO и вместо попытки записи PC в стек после неудачи записи PSW - просто уменьшал SP ещё на 2).

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Несмотря на это, SP еще уменьшается на 2, и хотя в 157776 уже можно занести, но второе слово не заносится в стек.
    Т.е. в предлагаемом тесте в ячейке 0157776 так и останется ноль..

  4. #303
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    2,064
    Благодарностей: 961
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Т.е. в предлагаемом тесте в ячейке 0157776 так и останется ноль..
    Да, останется. Скриншот прилагается.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	160002.jpg 
Просмотров:	147 
Размер:	84.6 Кб 
ID:	29832  

  5. #304
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,628
    Благодарностей: 2758
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Да, останется.
    Иначе и быть не могло - ведь тогда контроллер шины ВМ1 не мог бы формировать признак двойного зависания.

    Кстати, в моей модели ВМ1 релизация блока прерываний USER-моды выглядит так:
    Код:
    	try 
    	{    
    		SP -= 2;
    		word wSP = SP;
    		SP -= 2;
    
    		CheckAddrWrite(wSP);
    		WORD( wSP &(~1) ) = PSW;
    
    		CheckAddrWrite(SP);
    		WORD( SP &(~1) ) = PC;
    	}
    	catch(int)
    	{
    		return TrapTo_4();
    	}
    
    	PC  = WORD( wVector    );
    	PSW = BYTE( wVector +2 );
    Любопытно, что у 1801ВМ1 чтение нового значения PSW из вектора прерывания происходит с копированием младшего байта и обнулением старшего, что является очевидной ошибкой.

    Из-за этого процессор 1801ВМ1 вываливается из HALT-моды каждый раз, когда срабатывает блок прерываний USER-моды. Поэтому в HALT-моде процессора 1801ВМ1 допустимы только два прерывания: HALT (после команды HALT или сигнала IRQ1) и ЗАВИСАНИЕ, тогда как и любое аппаратное прерывание, и T-Trap, и Tpap_To_010 (например, после MFPT), и Trap_To_04 (например, после JSR R0) и любое программное прерывание типа EMT, IOT и т.п. - моментально выносят ВМ1 из HALT-моды.

  6. #305
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    2,064
    Благодарностей: 961
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Иначе и быть не могло - ведь тогда контроллер шины ВМ1 не мог бы формировать признак двойного зависания.
    Ну скриншоты с УКНЦ, там ВМ2.

    ---------- Post added at 16:59 ---------- Previous post was at 16:40 ----------

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

    Из-за этого процессор 1801ВМ1 вываливается из HALT-моды каждый раз, когда срабатывает блок прерываний USER-моды. Поэтому в HALT-моде процессора 1801ВМ1 допустимы только два прерывания: HALT (после команды HALT или сигнала IRQ1) и ЗАВИСАНИЕ, тогда как и любое аппаратное прерывание, и T-Trap, и Tpap_To_010 (например, после MFPT), и Trap_To_04 (например, после JSR R0) и любое программное прерывание типа EMT, IOT и т.п. - моментально выносят ВМ1 из HALT-моды.
    Кстати в ВМ2 точно также. Так как процессор имеет полноценное разделение на режимы HALT и USER (в отличии от ВМ1), то каждый режим имеет свое адресное пространство. Соответственно вектора для каждого режима находятся в своем адресном пространстве. В ВМ2 также введены регистры копии счетчика команд (CPC) и состояния процессора (CPSW). Эти регистры-копии повторяют значения PC и PSW, только когда в PSW не установлены одновременно два бита - 7 (запрет прерываний) и 8 (HALT), изменяются CPC и CPSW при изменении PC и младшего байта PSW. При установке этих двух битов CPC и CPSW "замораживаются". Соответственно, если из HALT-режима возникает прерывание USER-режима, то процессор переключается в USER-режим сбросом бита 8 в PSW, т.к. этот бит находится в старшем байте, то CPSW не изменяется. Далее уже в стек ложаться CPSW и CPC (да, у ВМ2 так, в любом режиме), читается вектор USER-режима (здесь в PSW копируется только младший байт, бит 8 уже сброшен), ну и обрабатывается прерывание. Здесь есть одно но! Прерывание USER-режима должно происходить при разрешенных прерываниях (бит 7=0), иначе CPC и CPSW будут "замороженными" и возвратиться назад не удасться. Также из USER-режима возможен возврат в HALT-режим, если адрес возврата равен или больше 160000. При адресе >=160000 в PSW копируются все 9 бит, а иначе только 8, восьмой бит остается неизменным.

  7. #306
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    2,064
    Благодарностей: 961
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Когда-то я делал описание ВМ2, выложу еще раз.
    Вложения Вложения

  8. Эти 4 пользователя(ей) поблагодарили Alex_K за это полезное сообщение:
    hobot (09.10.2011), shattered (07.06.2016), Titus (09.10.2011), Vamos (12.10.2011)

  9. #307
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,628
    Благодарностей: 2758
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  10. #308
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    2,064
    Благодарностей: 961
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Это понятно. Просто для ВМ1 такой алгоритм - единственно возможный, тогда как для ВМ2 - лишь наиболее рациональный. Поэтому, из положительного результата теста ВМ2 автоматически следует, что и у ВМ1 - всё точно так же.
    Это лучше проверить на реальной машине. Все-таки 1801ВМ1 переделывался из 1801ВЕ1 переписыванием микрокода, а 1801ВМ2 делался уже с нуля. Так что внутри они могут быть построены по разному.

  11. #309
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    9,972
    Благодарностей: 3445
    Mentioned
    2 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Когда-то я делал описание ВМ2, выложу еще раз.
    Монстр - такое описание составить.

    А разве RSEL не имеет одинаковые коды 000020 и 000030? У тебя под 000030 значится неизвестная команда.

  12. #310
    Guru
    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    2,064
    Благодарностей: 961
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Монстр - такое описание составить.

    А разве RSEL не имеет одинаковые коды 000020 и 000030? У тебя под 000030 значится неизвестная команда.
    Все проверено на практике.
    Кстати небольшое уточнение - CPSW изменяется только при изменении младшего байта PSW. Сам PSW состоит как бы из двух частей - младшего байта и отдельного бита 8. Просто это в этом описании не отразилось.

Страница 31 из 87 ПерваяПервая ... 272829303132333435 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Игры на УКНЦ
    от Titus в разделе ДВК, УКНЦ
    Ответов: 119
    Последнее: 30.11.2012, 18:13
  2. Корпуса от УКНЦ рулят.
    от Sonic в разделе Unsorted
    Ответов: 9
    Последнее: 07.08.2007, 12:47
  3. Железо УКНЦ
    от Sonic в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 26.07.2007, 08:39

Ваши права

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