Z80 Finite State Machine

Микропроцессоры и микроконтроллеры от фирмы Zilog, а также компьютеры на них построенные

Moderator: Shaos

pfgx
Senior
Posts: 137
Joined: 20 Mar 2013 03:36
Location: Ростов-на-Дону

Post by pfgx »

Буду пробовать реализовать шину и регистры на синхронной логике. На кристалле чтения-записи работают по уровню.
pfgx
Senior
Posts: 137
Joined: 20 Mar 2013 03:36
Location: Ростов-на-Дону

Post by pfgx »

Особенности Z80...

Есть сигнал 153, примерный смысл - в регистре инструкций находится инструкция, при которой сохраняются флаги, в том числе в них входят сдвиги с префиксом CB.

Есть сигнал 183, примерный смысл - в регистре инструкций находится инструкция, при которой результат сохраняется в аккумулятор, в том числе в них входят сдвиги rlc/rrc/rlnc/rrnc.

То есть при сдвигах с префиксом CB нет записи результата в аккумулятор, что логично, а при обычных сдвигах нет записи флагов, что странно. Видимо при обычных сдвигах флаг переноса сохраняется особым образом.

Далее RS-триггер.

Вход R = M1T1 and (153 or 183). Сброс при M1T1, если текущая инструкция требует сохранения результата в аккумулятор или сохранения флагов. Сохранение происходит во время выборки следующей инструкции, то есть выход этого триггера можно назвать "идёт процесс сохранения результата и/или флагов".

Но вход S = M1T3 or (M4T2 and (34 or 35 or что-то_ещё)). При M1T3 понятно - результат сохранили, новую инструкцию выполнять начали, но M4T2 при обычных сдвигах? Они же за 1 M-цикл выполняются, M1. То есть явно какие-то лишние условия.

В другом месте похожее. Вывод флагов на шину
flag_oe = ~(w3[353] or w2[225])

а потом некий строб при (подставим flag_oe в выражение)
flag_oe or w2[225] =
= ~(w3[353] or w2[225]) or w2[225] =
= (~w3[353] and ~w2[225]) or w2[225] =
= (~w3[353] or w2[225]) and (~w2[225] or w2[225]) =
= (~w3[353] or w2[225]) and TRUE =
= (~w3[353] or w2[225])

То есть опять какие-то странности в логических выражениях. Зачем такие сложности? Или это задаёт порядок формирования сигналов?

p.s. А схема десятичной коррекции участвует в формировании на шине адреса 0066h при NMI :)
bigmax
Fanat
Posts: 79
Joined: 10 Feb 2014 03:37

Post by bigmax »

Теперь понятно, откуда растут ноги у этого адреса.
pfgx
Senior
Posts: 137
Joined: 20 Mar 2013 03:36
Location: Ростов-на-Дону

Post by pfgx »

Не могу найти про "закладки" в Z80. Подскажите, сколько их было? Где-то упоминалось количество.

Один "лишний" транзистор в счётчике тактов уже есть, теперь вот при записи не срабатывает коммутатор на внутренней шине, который должен пропустить байт из регистра на выводы D0...D7. То есть он как бы срабатывает, но...
pfgx
Senior
Posts: 137
Joined: 20 Mar 2013 03:36
Location: Ростов-на-Дону

Post by pfgx »

В симуляторе появились "гонки сигналов", диаграммы логически правильные, но защёлкивается всякая фигня. Мне всё больше кажется, что в реальной ПЛИС все эти "защёлки по уровням" работать не будут.
pfgx
Senior
Posts: 137
Joined: 20 Mar 2013 03:36
Location: Ростов-на-Дону

Post by pfgx »

По идее при выполнении перехода адрес записывается в регистр WW, он же выставляется на шину адреса, а после инкремента записывается в PC и далее всё как обычно. Но опять какие-то странности в диаграммах, хотя всё срисовано верно.
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Вот чувак тоже реверсил Z80 по камню:

http://www.righto.com/2014/09/why-z-80s ... mbled.html
Я тут за главного - если что шлите мыло на me собака shaos точка net
DimkaM
Maniac
Posts: 261
Joined: 22 Jun 2005 04:35
Location: МО Россия

Re: Z80 Finite State Machine

Post by DimkaM »

интересен флаговый регистр, в частности биты 3 и 5

Если есть возможность отреверсить логику их заполнения