User Tag List

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

Тема: Загадка плавающих флагов SCF/CCF раскрыта!

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

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

    Регистрация
    24.07.2018
    Адрес
    г. Москва
    Сообщений
    83
    Спасибо Благодарностей отдано 
    34
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    34 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Всем привет. Увы, не знаю, как вас, а меня все эти тесты вообще не приблизили к пониманию, как бы это все можно было бы сэмулировать. Но тут мне помог случай. Мне тоже удалось пронаблюдать девиации во флаге F3 на подопытном, даже несмотря на то, что процессор тактировался достаточно медленно. Процессор подключен к микроконтроллеру, который имитирует окружение, память, забирая и поставляя данные, и отправляя данные на компьютер, где я могу это все проанализировать с красивой расшифровкой. Увы, маркировки на процессоре нет, но это какой-то из старых, был в Спектруме 48К, Ленинград, наверное, самосбор, который лежит у меня с детства.

    Интересной для меня показалась команда CP, поскольку не меняет регистр A, но, тем не менее, влияет на флаги, после нее могло найтись что-то интересненькое. Сначала немного потыкал ее, получил странное, например, при нулях в регистрах после SCF во флаге F3 я получил единицу, поэтому написал цикл:
    Код:
            LD A,0
            LD B,0
    LOOP:
            CP B
            SCF
            PUSH BC; чтобы в дампе был виден B
            POP DE
            PUSH AF; чтобы в дампе были видны флаги
            POP DE
            DJNZ LOOP
    После CP флаги F5 и F3 должны браться из аргумента, в моем случае это B, который у нас на первой итерации #00, затем изменяется от #FF до #01. Этот код выполнялся три раза, полный дамп каждого прогона сохранялся. В некоторых полученных значениях были обнаружены девиации. На следующий день я также запустил немного другой код, но на сей раз получил уже более стабильные и ожидаемые результаты, хоть и не без нюансов, но без явных девиаций. Вернул прошлый код, но девиаций также больше не было, и не представляю, как можно было бы повторить те результаты. Сделал два прогона. Все результаты свел в табличку, здесь значения регистра флагов для каждого из значений B:

    Код:
     \ | 00 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | A0 | B0 | C0 | D0 | E0 | F0 |
    ---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----|
    00 | 4* | 8* | A* | A* | 8* | 8* | A* | A* | 8D | 0* | 2* | 2* | 0* | 0* | 2* | 2* |
    01 | 8* | 8* | A* | A* | 8* | 8* | A* | A* | 0* | 0* | 2* | 2* | 0* | 0* | 2* | 2* |
    02 | 8* | 8* | A* | A* | 8* | 8* | A* | A* | 0* | 0* | 2* | 2* | 0* | 0* | 2* | 2* |
    03 | 8* | 8* | A* | A* | 8* | 8* | A* | A* | 0* | 0* | 2* | 2* | 0# | 0* | 2* | 2% |
    04 | 8* | 8# | A* | A* | 8* | 8* | A* | A* | 0* | 0% | 2* | 2# | 0# | 0% | 2* | 2% |
    05 | 8# | 8# | A# | A# | 8* | 8* | A* | A* | 0* | 0% | 2* | 2# | 0# | 0% | 2% | 2% |
    06 | 8# | 8# | A* | A# | 8* | 8* | A* | A* | 0* | 0% | 2# | 21 | 0# | 01 | 2% | 21 |
    07 | 8# | 8# | A# | A# | 8* | 8* | A* | A* | 0* | 01 | 21 | 21 | 01 | 01 | 2% | 21 |
    08 | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
    09 | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
    0A | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
    0B | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
    0C | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
    0D | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
    0E | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
    0F | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
    Здесь * означает, что значение ожидалось 1, но было 9 в предыдущий день, а на следующий день стало 1,
    # означает, что в предыдущий день, когда была обнаружена нестабильность, значение иногда было 1, иногда 9, отличалось в каждом дампе,
    % означает то же, только сравнение было с другим сохраненным дампом. Вообще, все собранные дампы субъективно охарактеризовал бы, как стабильный в одну сторону, стабильный в другую сторону, и наименее стабильный.

    Думаю, из такой таблички вполне можно выявить некую систему, сделать какие-то выводы, лучше понять, как такое поведение можно было бы проэмулировать, если есть такое желание. Предполагаю, что и F5 может аналогичным образом проявлять нестабильность, это только в моем случае он был стабильным. Наверное, может быть нестабильность и с установленными значениями флагов, но в моем случае это было связано именно с нулевыми их ожидаемыми значениями, где они такими должны были быть.

    Кроме того, хотел бы обратить ваше внимание на значение для B=#80, где флаги выставились как #8D, т.е. вместе с флагом переполнения F3 также раз за разом оказывается установленным, хотя в B соответствующий бит сброшен, в результате вычитания бит сброшен, в регистре A соответствующий бит сброшен. Тем не менее, это значение стабильно повторяется во всех моих собранных дампах, 5 из 5. Хотя в чуть другом коде получил таки #85. Для B=#00 я получал как #49 - все три дампа в предыдущий день, так и #41 - в обоих дампах на следующий день.
    Последний раз редактировалось cafedead; 20.06.2025 в 20:50.

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

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

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

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

Похожие темы

  1. Загадка
    от 31pka в разделе Несортированное железо
    Ответов: 20
    Последнее: 11.03.2020, 05:02
  2. Описание команд Z80: Установка флагов
    от ВитГо в разделе Эмуляторы
    Ответов: 14
    Последнее: 06.03.2019, 20:42
  3. Поясните по поводу регистра AF и флагов
    от jim в разделе Программирование
    Ответов: 10
    Последнее: 27.11.2005, 14:51
  4. Проясните по поводу регистра флагов Z80
    от Shiru в разделе Программирование
    Ответов: 45
    Последнее: 14.05.2005, 12:06

Ваши права

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