User Tag List

Показано с 1 по 10 из 1115

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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

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

    По умолчанию

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

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

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

  3. #2

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,805
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 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-моды.

  4. #3

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,247
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 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, восьмой бит остается неизменным.

  5. #4

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

    По умолчанию

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

  6. #5

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

    По умолчанию

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

  7. #6

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

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Кстати в ВМ2 точно также.
    Думаю, что не совсем "точно" так же..

    У процессора 1801ВМ1 работа и с аппаратными, и с программными прерываниями в HALT-моде полностью исключена.

    Наверное, это и не ошибка - ведь ВМ1 при переходе в HALT-моду не переключает младшие страницы памяти, из-за чего находящиеся там вектора не годятся для использования в HALT-моде.

    Тогда как у ВМ2 (насколько я понимаю) - работа с аппаратными и программными прерываниями в HALT-моде вполне возможна.

  8. #7

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

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Думаю, что не совсем "точно" так же..

    У процессора 1801ВМ1 работа и с аппаратными, и с программными прерываниями в HALT-моде полностью исключена.
    Как это исключена? Неужто в HALT-режиме невозможно выполнить команду EMT?
    Цитата Сообщение от Patron Посмотреть сообщение
    Наверное, это и не ошибка - ведь ВМ1 при переходе в HALT-моду не переключает младшие страницы памяти, из-за чего находящиеся там вектора не годятся для использования в HALT-моде.

    Тогда как у ВМ2 (насколько я понимаю) - работа с аппаратными и программными прерываниями в HALT-моде вполне возможна.
    Какое переключение? У ВМ1 независимо от режима одно адресное пространство. Действительно при переходе в HALT процессор устанавливает бит 3 в регистре 177716, но это уже особенности архитектуры компьютера.

  9. #8

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

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Как это исключена? Неужто в HALT-режиме невозможно выполнить команду EMT?

    Какое переключение? У ВМ1 независимо от режима одно адресное пространство. Действительно при переходе в HALT процессор устанавливает бит 3 в регистре 177716, но это уже особенности архитектуры компьютера.
    Процессор 1801ВМ1 в HALT-режиме отрабатывает прерывание зависания не по вектору 04, а по вектору SEL1+02.

    Это единственное (если не ошибаюсь) отличие поведения процессора 1801ВМ1 в HALT-режиме от поведения в USER-режиме.

    Команду EMT можно выполнить в HALT-режиме, но её нельзя использовать в коде, который должен РАБОТАТЬ в HALT-режиме, поскольку запуск блока прерываний, вызванный командой EMT, немедленно переключит процессор в USER-режим.

    Вот почему работа и с аппаратными, и с программными прерываниями в HALT-режиме процессора 1801ВМ1 полностью исключена.

  10. #9

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

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Процессор 1801ВМ1 в HALT-режиме отрабатывает прерывание зависания не по вектору 04, а по вектору SEL1+02.
    В ВМ2 также обработка зависания зависит от того, в каком режиме находится процессор.
    Цитата Сообщение от Patron Посмотреть сообщение
    Команду EMT можно выполнить в HALT-режиме, но её нельзя использовать в коде, который должен РАБОТАТЬ в HALT-режиме, поскольку запуск блока прерываний, вызванный командой EMT, немедленно переключит процессор в USER-режим.

    Вот почему работа и с аппаратными, и с программными прерываниями в HALT-режиме процессора 1801ВМ1 полностью исключена.
    А вот здесь давайте внимательно рассмотрим эту ситуацию. Я опишу как все это работает на ВМ2 и задам Вам вопросы по поводу ВМ1.
    Начнем. 1. Процессор работает в HALT-режиме (бит 8 PSW установлен). Разрешим прерывания сбросом бита 7 для того, чтобы изменялись CPC и CPSW. Насколько я понимаю HALT-режим у ВМ1 устанавливается установкой бита 10 в PSW, он же вроде запрещает одновременно и аппаратные прерывания. Наш процесс будет выполняться в адресах старше 160000.
    2. Выполняем команду EMT. Так как у ВМ2 это прерывание USER-режима, то процессор вываливается в режим USER, сохраняет в стеке CPC и CPSW, читает в PC и PSW значение вектора 30(так как это вектор USER-режима, то в PSW записывается только младший байт) и запускает процесс на исполнение. Соответственно сохраненный в стеке CPSW содержит установленный бит 8 (режим HALT).
    Вопрос:Как у ВМ1 в стеке сохраняется PSW - только младший байт или целиком весь?
    3. Процесс по EMT выполнился, выходим по RTI. Так как точка возврата больше 160000, то в PSW копируются все 9 битов и мы снова в режиме HALT.
    Вопрос:Как у ВМ1 по командам RTI/RTT происходит установка PSW - всего целиком или только младшего байта?

    Вся соль ситуации еще состоит в том, что у ВМ2 всего один регистр R6, он общий, независимо от режима. Т.е. не так как у ВМ3. Соответственно в архитектуре должно быть предусмотрено общее пространство ОЗУ для USER/HALT или при работе в HALT не надо трогать R6. Либо если тронули, то возвратить обратно, если возможна ситуация переключения в USER.

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

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

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

Похожие темы

  1. Эмулятор УКНЦ - EmuStudio
    от Titus в разделе Эмуляторы отечественных компьютеров
    Ответов: 1198
    Последнее: 07.05.2025, 13:34
  2. Ответов: 247
    Последнее: 17.11.2024, 07:55
  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

Ваши права

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