Игрался с z80 и МК. Могу задавать любую частоту, могу анализировать всё что хош. Выставляйте условия.
А вот этого я не знаю. Я даже не знаю, с какой конкретно модели в проекте Z80 Explorer снимали схему.
Но, думаю, стоит попробовать на любом NMOS.
- - - Добавлено - - -
Задача такая. Если на спектруме, то по адресу $4000 разместить примерно такой код:
DI
LD A,0 (или $FF для второго теста)
OR A
NOP (загрузка кеша текущими значениями флагов)
ADD HL,DE (или SCF) (на все 48Кб)
В конце выполнения смотрим регистр флагов
- - - Добавлено - - -
На основании кода команды. А именно:
- - - Добавлено - - -
Кому известна? Блоку декодирования команд и флагов) А АЛУ неизвестна. АЛУ как раз ориентируется на флаг, чтобы инвертировать аргумент.
- - - Добавлено - - -
Разумеется. Но по скольку АЛУ всегда делает ADC, а не ADD, то как раз инвертируя входящий перенос и получается вычитание. Вообще, т.к. блок АЛУ 4-битный, он не ориентируется на флаг C, он ориентируется на флаг H. Думаю, поэтому флаг полупереноса вообще и был сделан в процессоре в том числе, т.к. он фактически является связующим переносом между двумя отдельными действиями 4-битного АЛУ.
- - - Добавлено - - -
Кстати, еще из интересного.
Регистр WZ, выбирается всегда, когда на том или ином этапе выполнения команды не выбран другой регистр. Там так и стоит широкое условие, что если не AF, если не HL, DE и т.д., то тогда выбираем WZ.
Пока с WZ тоже не разбирался, но думаю, он участвует во всех промежуточных операциях типа вычисления индекса, эффективного адреса относительных переходов и т.д.
- - - Добавлено - - -
И еще кстати - я думаю, что то, что имеется в виду под регистром MEMPTR, от которого в 3 и 5 битах в регистре флагов остаются следы, на самом деле не существует. Это просто остаточный заряд на шинах HBUS/LBUS. А так как LBUS используется для формирования флагов, и во время формирования флагов 3 и 5 биты просто не презаряжаются, а остаются, как есть, то и получается соответствующий результат.
- - - Добавлено - - -
Есть, конечно регистр PCR (так его назвали авторы Z80 Explorer). Может его и можно считать MEMPTR, т.к. через него инкрементируются 16-битные регистры типа PC, IR (7 бит).
- - - Добавлено - - -
Если кому интересно, текущий набросок выглядит так:
NMOS Z80 - sketch rev.14.pdf
Barmaley_m(23.08.2024), Reobne(23.08.2024)
Прихожу без разрешения, сею смерть и разрушение...
Последний раз редактировалось goodboy; 23.08.2024 в 15:51.
Barmaley_m(23.08.2024), Titus(23.08.2024)
Выходит, что так. Особенно с флагом полу-переноса.
- - - Добавлено - - -
Это не обязательно, т.к. мы смотрим флаг S, а на него ADD HL,DE не влияет не зависимо от аргументов.
- - - Добавлено - - -
По твоему тесту сбоя не видать. У тебя NMOS процессор?
по-маркировке ( Z8400APS) - да
Надо попробовать еще на других. Но может действительно не успевает заряд разрядиться.
Если ничего не выйдет, то может кто-то смоделирует на какой-нить железке ситуацию, когда процессору скармливается несколько секунд один и тот же опкод, и потом уже смотреть флаги. Потому что реально интересно, за сколько времени разрядится ячейка.
- - - Добавлено - - -
Так с данным тестом отбой.
Почему? Потому что я поленился посмотреть потранзисторную версию этого фрагмента, и там все хорошо сделано. Постоянно регенерируется с помощью CLK.
Буду в следующий раз внимательнее проверять подобные подозрения.
- - - Добавлено - - -
![]()
Barmaley_m(23.08.2024), Reobne(23.08.2024)
Ну это из-за другой особенности, из-за CCF, я думаю.
- - - Добавлено - - -
Погулял по транзисторной версии схемы, никакой утечки во всем блоке формирования флагов не нашел
Значит недокументированное поведение CCF не связано именно с утечкой в блоке флагов.
Надо будет посмотреть последовательно алгоритм выполнения CCF.
- - - Добавлено - - -
Проследил всю цепочку выполнения CCF.
Отличия от обычного NOP:
1. В такте T5 (T4 + 1) копируется кешированный ранее флаг C во флаг H
2. В такте T6 ничего не происходит
3. В такте T7 (T4 + 3) копируется инверсная копия H во флаг C.
4. В такте T8 (Т4 + 4) флаги выставляются на шину LBUS (кроме 3 и 5).
Поэтому если какой-то глюк и есть в CCF, то его надо искать только в 3 и 5 флагах, т.е. в состоянии LBUS во время выполнения CCF.
Но на LBUS я тоже не вижу никакого мусора. Туда копировался флаг F перед началом команды, значит флаги 3 и 5 должны были сохраниться.
Словом, пока не вижу по схеме потенциальных глюков, откуда они взялись в тестах иностранных товарищей.
А что касается команды SCF, то она работает абсолютно также, как CCF, за единственным исключением - в такте T5 флаг H очищается. Поэтому флаг H=0 при инверсии становится 1, и C становится равной 1.
Последний раз редактировалось Titus; 23.08.2024 в 20:02.
Barmaley_m(24.08.2024)
Попричесывал блок формирования флагов, переделав все двунаправленные ключи обьеденив их многопортовые триггеры. Теперь все выглядит намного нагляднее.
Reobne(26.08.2024)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)