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)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Понятно, значит обращение, скажем к памяти по адресу 160000 в режиме USER, должно вызвать зависание. А двойное зависание как устроить на УКНЦ?
    Правильно. А вот если перед этим в R6 загнать 170000, то тогда будет двойное зависание. Сперва произойдет зависание при обращении к 160000, ставится признак обработки зависания, соответственно текущие PC и SP должны положиться в стек, но при операции заноса в стек также происходит зависание. Но т.к. в данный момент происходит обработка зависания (стоит флаг), то уже произойдет двойное зависание.

    Более сложный пример. SP будет нормальный, но по вектору 4 занесем 170000 (п/п обработки зависания находится в несуществующей памяти), в ячейке 6 должно быть 200 (запрет прерываний). При обращении к 160000 происходит зависание, ставится флаг обработки, сохраняются PC и SP в стеке (успешно). Из ячеек 4 и 6 читается вектор и начинает исполняться программа обработки прерывания. Т.к. еще не было успешного чтения кода команды, то флаг обработки прерывания не сброшен. Но чтение первой команды неуспешное, флаг стоит - в итоге двойное зависание.

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

  3. #2

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

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    SP будет нормальный, но по вектору 4 занесем 170000 (п/п обработки зависания находится в несуществующей памяти), в ячейке 6 должно быть 200 (запрет прерываний). При обращении к 160000 происходит зависание, ставится флаг обработки, сохраняются PC и SP в стеке (успешно). Из ячеек 4 и 6 читается вектор и начинает исполняться программа обработки прерывания. Т.к. еще не было успешного чтения кода команды, то флаг обработки прерывания не сброшен. Но чтение первой команды неуспешное, флаг стоит - в итоге двойное зависание.
    У процессора 1801ВМ1 (если не ошибаюсь) в этом случае произойдёт циклический вход в обработчик зависания, который будет заносить PC и SP в стек до тех пор, пока указатель стека не вылезет из границ ОЗУ и только тогда произойдёт "нормальное" двойное зависание.

    Допускаю, что и у 1801ВМ2 дела обстоят так же, но при тестировании этот тонкий момент не был должным образом отслежен.

  4. #3

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

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    У процессора 1801ВМ1 (если не ошибаюсь) в этом случае произойдёт циклический вход в обработчик зависания, который будет заносить PC и SP в стек до тех пор, пока указатель стека не вылезет из границ ОЗУ и только тогда произойдёт "нормальное" двойное зависание.

    Допускаю, что и у 1801ВМ2 дела обстоят так же, но при тестировании этот тонкий момент не был должным образом отслежен.
    Насчет 1801ВМ1 не скажу, нет его у меня. Если его и тестировать, то только на МС1201.01, на БК этот тонкий момент не проловишь. А вот у 1801ВМ2 дела обстоят именно так, все тестировалось на реальной машине, чтобы узнать когда формируется двойное зависание. В эмуляторе этот момент учтен.
    Проверка простая. В ячейки 4 и 6 занести 170000 и 200 соответственно. С адреса 1000 занести команду TST @#160000 (коды 005737 и 160000). Запустить обязательно с помощью ИСП. В итоге двойное зависание, R6 равен 774 (если до этого он был 1000), R7 равен 170002.

  5. #4

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

  6. #5

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

    По умолчанию

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

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

  7. #6

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

    По умолчанию

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

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

  8. #7

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

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

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

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

Похожие темы

  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

Ваши права

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