UncleDim(10.10.2024)
И наконец, особенности установки 5 и 3 бит регистра флагов после выполнения команды BIT r,(HL).
В команде BIT n,(HL) в отличие от команд типа ALU (HL) цикл чтения аргумента из памяти (M4) длится 4, а не 3 такта!
Почему такое происходит, при том что команды абсолютно однотипные?
Дело в том, что все команды с префиксом CB активизируют сигнал GRP_OFFSET, как и команды работающие только с индексной адресацией. Очевидно, это сделано для универсализации работы набора CB с индексной адресацией. А быть может просто вследствие ошибки. Если бы не эта совершенно ненужная особенность, команда BIT n,(HL) выполнялась бы не 12, а 11 тактов.
Сигнал GRP_OFFSET в основном влияет на циклы M2 и M3, отвечающие за индексную адресацию. Но при этом он еще и влияет на длительность цикла M4, продлевая его с 3 до 4 тактов. И этот 4-й такт совершенно для нашей команды бесполезен!
Но самое главное, что в такте M4.T4.2 всегда активно чтение старшего байта выбранного регистра на шину HBUS. А какой же регистр у нас выбран? А выбран WZ, т.к. когда не выбран никакой регистр, всегда выбирается WZ. В результате на обьединенной шине HBUS/LBUS оказывается не содержимое рабочего регистра r, как в команде BIT n,r, а старший байт регистра WZ, который используется другими командами для вычисления исполнительного адреса при индексной адресации.
Возникает вопрос, ведь в последнем такте любой команды должен выбираться регистр PC, и это должно блокировать выбор WZ?
Нет, не блокирует, т.к. выбор регистра PC для чтения кода операции управляется отдельной линией, и не блокирует выбор WZ. Иными словами, в первом такте следующей за BIT n,(HL) команды одновременно читается регистр PC из дополнительного регистрового блока (регистры PC и IR) для выборки кода команды, и читается регистр WZ.H из основного регистрового блока на шину HBUS/LBUS, откуда через несколько тактов и попадает в 5 и 3 биты флагового регистра.
- - - Добавлено - - -
При чем тут название провода. От имени ничего не меняется. Когда я перегоняю трансы в вентили, либо же когда оптимизирую схему, соединяя несколько вентилей в триггер, или меняя полярность какой-то линии, т.к. в оригинале она инверсная, а для лучшего понимания схемы следует линию сделать прямой. Вот тут и может закрасться ошибка. Повторюсь еще раз, я не делаю схему для клонирования ее в ФПГА. Прежде всего я делаю схему, чтобы она была наглядной и понятной, поэтому вследствие этих оптимизаций и может закрасться ошибка перепутанной полярности.
SoftLight(09.10.2024)
Ну опять же возвращаясь к теме "понимания". Комбинаторно-последовательностная логика, в которой ты копаешься - понимается путём изучения временных диаграмм.
Это brainchild разработчиков чипа.
Даже если ты красиво восстановишь схему - тот кто будет искать практическое применение не будет изучать вентили - "ммм а тут у нас AND, тот OR агась потом это идёт на этот FF". Ему интересней будет понимать какие диаграммы порождает данный кусок логики. Схему никто "читать" не будет, только в крайнем случае, если возникнут вопросы, на которые нельзя ответить просматривая вейвы.
Это тоже самое что восстанавливать дизассемблированный код умножения двух матриц написанный на SSE. Не нужно понимать почему одна SSE следует за другой. Нужно понимать просто как работает каждая инструкция ("вентили") и что в итоге делает весь кусок кода ("логики").
И к другим новостям. Я начал восстанавливать топо верхнего левого угла тошибовского з80. Там находится клоковый гена, буферы для DB интерфейса и АЛУ.
tushkan(11.10.2024)
Изучение диаграмм - это смотреть только на последствия, но не на причину.
Для простого повторения чипа в ФПГА и контроля идентичности - вполне подходяще. Экономит время и деньги.
Однако, для моих целей - детального изучения особенностей работы Z80 смотреть только на последствия - не информативно.
Попробуй найти, почему шумит команда SCF/CCF по диаграммам? Диаграммы даже не покажут этот шум.
Почему OUT (c),0 выдает ноль? Почему BIT n,(HL) выставляет так флаги, и как?
Видя схему, это понимается достаточно легко и быстро.
Диаграммы модели в проекте Z80 Explorer существуют уже 10 лет. Но как-то это не особо продвинуло в понимании некоторых загадок Z80, которые без видения причин, а не последствий отгадать можно только умозрительно и предположительно.
Твой подход хорош для твоих целей. А мой для моих. Каждому своё)
- - - Добавлено - - -
Лучше картинки не прикреплять средствами форума, они несмотрибельные.
Лучше на сторонний хостинг. Мы использовали pic.maxiol.com, хотя по стечению обстоятельств, он сегодня первый день, как не работает)
AlexG(10.10.2024)
Упрощенное описание команд LDI(R)/LDD(R):
В такте M1.T4 сбрасываются флаги N и H.
В такте M2.T1 содержимое HL записывается в PCR и на шину адреса для чтения содержимого памяти по адресу (HL).
В такте M2.T3 инкрементированное (для LDI(R)) или декрементированное (для LDD(R)) содержимое PCR обратно записывается в регистр HL.
В такте М3.T1 содержимое DE записывается в PCR и на шину адреса для записи байта в память по адресу (DE).
В такте M3.T3 инкрементированное (для LDI(R)) или декрементированное (для LDD(R)) содержимое PCR обратно записывается в регистр DE.
В такте M3.T4 содержимое BC записывается в PCR. Если BC = 1, то флаг P=0, иначе флаг P=1. Если BC = 1 или команда LDI/D, то этот цикл является последним циклом команды.
В такте M3.T5 декрементированное содержимое PCR записывается обратно в регистр BC. Также в этом такте + 1 на шину HBUS выдается результат работы АЛУ. В нашем случае (точно пока не изучал) АЛУ должно было сложить содержимое регистра A и байта, который копировался из (HL) в (DE). Таким образом, 5 и 3 биты регистра флагов берутся из A + (HL).
В такте M4.T1 содержимое PC записывается в PCR.
В такте M4.T3 декрементированное содержимое PCR записывается обратно в PC и снова читается в PCR
В такте M4.T5 декрементированное содержимое PCR записывается обратно в PC.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)