Вопрос про !M1 при чтении операнда

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

Moderator: Shaos

User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Вопрос про !M1 при чтении операнда

Post by masterspammer »

Какое значение вывода !M1 при извлечении операнда команды, например второго байта в LD B, 0x15, третьего в LD A, [IX+2], третьего и четвёртого - в LD HX, 0x1212 или в CALL 0x1212? Другими словами - это ещё извлечение кода операции или уже цикл чтения? Подозреваю, что цикл чтения, но нигде не нашёл указания на то. Ткните носом в datasheet, пожалуйста!

P.S. При чтении спецификации процессора у меня сложилось впечатление, что !M1 активен при извлечении как минимум кода команды со всеми префиксами (с перерывами на регенерацию памяти). В таком случае получение сигнала INTE в ZX-card для Ориона-128 (схема http://rdk.regionsv.ru/orion128-z80card.htm из Радио 1996, N4) будет ошибаться на командах set 6,E (CB F3), set 7,E (CB FB), срабатывая на их второй байт, хотя в программах для ВМ80 таких сочетаний быть не должно. Если же линия !M1 активна и при выборе операнда, то ZX-card будет ошибаться и на командах вида LD A, 0xF3, CALL 0xF8F3 и так далее, про что я не слышал и потому склоняюсь, что операнд читается без !M1
Last edited by masterspammer on 17 Jan 2021 19:41, edited 1 time in total.
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Вопрос про !M1 при чтении операдна

Post by Shaos »

Ну вроде как аргументы инструкции считаются данными - M1 будет только у самой инструкции (и видимо префиксов)
Я тут за главного - если что шлите мыло на me собака shaos точка net
Alekcandr
Doomed
Posts: 665
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Вопрос про !M1 при чтении операдна

Post by Alekcandr »

1. M1 указывает, что это первый машинный цикл при выполнении какой либо инструкции.
2. M1 используется в обработке прерываний.

Если не изменяет память. Для Z80 карты Ориона М1 использовался для детекта инструкции EI/DE и эмуляции сигнала INTE (сигнал для бипера в Радио-86РК подобных компьютерах) ВМ80.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Вопрос про !M1 при чтении операдна

Post by masterspammer »

Shaos wrote:Ну вроде как аргументы инструкции считаются данными - M1 будет только у самой инструкции (и видимо префиксов)
Спасибо! Схема упрощается! А у префиксов, кстати, не может не быть !M1 - когда процессор выставляет !M1 он ещё не знает - что там будет - инструкция или префикс.
Другое дело, что теоретически он может не выставлять его после префикса...
Alekcandr wrote:1. M1 указывает, что это первый машинный цикл при выполнении какой либо инструкции.
Вот в pdf как-то мутно написано. Можно по-разному трактовать, а все эпюры для однобайтных инструкций.
Alekcandr wrote:2. M1 используется в обработке прерываний.
Угу, INT (!IOREQ + !M1), в NMI не используется, насколько знаю.
Alekcandr wrote: Если не изменяет память. Для Z80 карты Ориона М1 использовался для детекта инструкции EI/DE и эмуляции сигнала INTE (сигнал для бипера в Радио-86РК подобных компьютерах) ВМ80.
Так я про то и написал - если при при команде с префиксом будет M1, то бипер будет поскрипывать на set 6,E / set 7,E; звучит странно - неужели "и так сойдёт"?
OOPS! А я написал ZX-Card!
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Вопрос про !M1 при чтении операдна

Post by Lavr »

masterspammer wrote:А у префиксов, кстати, не может не быть !M1 - когда процессор выставляет !M1 он ещё не знает - что там будет - инструкция или префикс.
Другое дело, что теоретически он может не выставлять его после префикса...
M1 Machine Cycle 1 - Машинный цикл 1
Активный уровень - низкий. /M1 указывает, что в текущей
машинном цикле происходит чтение кода операции из памяти. При считывании кода
операции вида CB, ED, DD, FD вырабатывается ещё один цикл M1 для считывания второго
байта кода операции, т.е. сигнал /M1 активизируется дважды.

/M1 также активизируется вместе с сигналом /IORQ в цикле подтверждения
прерывания.
https://zxpress.ru/book_articles.php?id=1447
Image
iLavr
Alekcandr
Doomed
Posts: 665
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Вопрос про !M1 при чтении операдна

Post by Alekcandr »

masterspammer, вот тут можно предметно пожмакать, и получить ответ на вопрос.
masterspammer wrote:то бипер будет поскрипывать на set 6,E / set 7,E; звучит странно - неужели "и так сойдёт"?
Видимо будет поскрипывать, но для этого еще придется постараться.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Вопрос про !M1 при чтении операдна

Post by masterspammer »

Lavr wrote:
...ещё один цикл M1 для считывания второго
байта кода операции, т.е. сигнал /M1 активизируется дважды.

/M1 также активизируется вместе с сигналом /IORQ в цикле подтверждения
прерывания.
https://zxpress.ru/book_articles.php?id=1447
Image

Хорошая книжка! Спасибо!
Глянул в datasheet, вдруг я пропустил, но нет, там нет места про ещё цикл - сразу про подтверждения прерывания.

Alekcandr wrote:masterspammer, вот тут можно предметно пожмакать, и получить ответ на вопрос.

Спасибо, пожамкал! Итого:

* В итоге в течении чтения всей команды чередуются !RFSH и !M1 (вывод RFSH не выводится, но виден на кристалле), возможны перерывы на DMA, тогда точнее сказать, что будут чередоваться !RFSH, !M1 (при неактивном !IORQ) и !BUSAK; при упрощении формулы, естественно, !IORQ смотреть со стороны буфера, иначе можно поймать сигнал !IORQ от контроллера DMA.

* Команды без параметров таким образом друг от друга неотделимы - идёт ли команда с префиксом или две разные команды - не понять - нужно смотреть на шину данных и ловить префиксы, высчитывая длину команды.

* Может быть ещё разное про обработке команды HALT, но симулятор не умеет показывать её длительную работу (можно и на реальном железе потом посмотреть).

* Отдельная тема с !NMI - так как обработка немаскируемого прерывания на вид неотличима от [s]магии[/s] чтения команды, то решением будет задержать поступление !NMI до завершения команды (тут см. примечание про неотделимость команд) и тогда уже будет понятно, что сейчас обрабатывается прерывание.

Alekcandr wrote:Видимо будет поскрипывать, но для этого еще придется постараться.

На поскрипывание в общем-то плевать, а для более серьёзного применения, боюсь, требуется что-то посерьёзнее.
Alekcandr
Doomed
Posts: 665
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Вопрос про !M1 при чтении операдна

Post by Alekcandr »

Я бы рассматривал Z80 как некую стейт машину (конечный автомат) без "магии", и тогда все станет проще и понятней.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Вопрос про !M1 при чтении операдна

Post by masterspammer »

Alekcandr wrote:Я бы рассматривал Z80 как некую стейт машину (конечный автомат) без "магии", и тогда все станет проще и понятней.
Вопрос, как именно этот автомат устроен (вроде разобрался) - часть вещей-то можно сделать более чем одним способом.
...и как повторить в упрощённом виде этот автомат, если нужно точно отследить выполняемую команду. Довольно просто, кстати...
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Вопрос про !M1 при чтении операдна

Post by Lavr »

masterspammer wrote:
Alekcandr wrote:Я бы рассматривал Z80 как некую стейт машину (конечный автомат) без "магии", и тогда все станет проще и понятней.
Вопрос, как именно этот автомат устроен (вроде разобрался)...
Скажем так, любой процессор - это просто "конечный автомат"...
Но в чём цель топикстартера - не совсем понятно, с сигналом /М1 вроде как успешно разобрались.
iLavr
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Вопрос про !M1 при чтении операдна

Post by masterspammer »

Lavr wrote:...
Скажем так, любой процессор - это просто "конечный автомат"...
Тут не соглашусь; в теории процессор можно свести к формальному конечному автомату, но на более-менее современных мы
получим множество состояний мощности как бы не больше числа частиц во вселенной и такое сведение будет тупиком
(понимания не добавит).

Другое дело - рассмотреть какую-то часть процессора как конечный автомат - полезно и логично; ну или не рассмотреть, а реализовать.
Lavr wrote:Но в чём цель топикстартера - не совсем понятно, с сигналом /М1 вроде как успешно разобрались.
Есть одна задумка - совершенно безумная и бесполезная; напишу о ней детальнее, как спаяю прототип.
И мне там нужно детектировать часть команд, а для этого - отделять их друг от друга и от префиксов. Теперь понятно, как
и можно делать автомат (мелкая логика или простая 556РТ** и несколько триггеров).

То, как это сделано для "Ориона" выглядит ненадёжным (хотя для пищалки может и хватит), сначала я удивлялся простоте схемы,
потому у меня и возникли сомнения про активность !M1 после извлечения префикса - может я чего не понимаю и так делать можно?
Теперь понимаю, что при работе только 8080 кода проблем не будет, а в остальном "и так сойдёт".
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Вопрос про !M1 при чтении операдна

Post by Lavr »

masterspammer wrote:
Lavr wrote:...
Скажем так, любой процессор - это просто "конечный автомат"...
Тут не соглашусь; в теории процессор можно свести к формальному конечному автомату, но на более-менее современных мы
получим множество состояний мощности как бы не больше числа частиц во вселенной и такое сведение будет тупиком
(понимания не добавит).
Давайте всё же определимся точнее, с чем вы не согласны: с тем что любой процессор - это просто "конечный автомат",
или верное по сути утверждение, что любой процессор - это просто "конечный автомат" просто лично вам не добавит понимания?
iLavr
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Вопрос про !M1 при чтении операдна

Post by Shaos »

ну на самом деле если есть динамическая составляющая (как в старых NMOS-процах), то это уже не автомат никакой, а динамическая система с элементами хаоса, которую предсказать и полностью просимулировать невозможно :mrgreen:

настоящие конечные автоматы это CMOS-процы, которые по даташиту могут работать от 0 Гц
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Вопрос про !M1 при чтении операдна

Post by Lavr »

Да ну нафиг... я почему и переспросил, поскольку мне было интересно, что подразумевается конкретным
человеком под фразой "конечный автомат".
По определению обычно это:
Конечный автомат — это некоторая абстрактная модель, содержащая конечное число состояний чего-либо. Используется для представления и управления потоком выполнения каких-либо команд.

Процессор обычно так и рассчитывают, как "конечный автомат".
Потому как если число состояний бесконечно, ты его просто не рассчитаешь.

А вот всякие вещи типа:"динамическая система с элементами хаоса, которую предсказать и полностью просимулировать
невозможно
" - это фигня, хорошо, что Интел не слышит... :-?
Особенно "с элементами хаоса" - это просто ерунда.
iLavr
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Вопрос про !M1 при чтении операдна

Post by masterspammer »

Lavr wrote: Давайте всё же определимся точнее, с чем вы не согласны: с тем что любой процессор - это просто "конечный автомат",
Процессор, если анализировать его структуру, явно содержит ячейки памяти, у классического конечного автомата памяти
(кроме единственного значения - состояния) нет, так что он в лучшем случае - множество взаимодействующих конечных автоматов.
Тем не менее, несмотря на то, что по сути (по задумке изготовителя, структуре и т.д.) он не является автоматом, можно построить
эквивалентный ему конечный автомат, хотя он и будет чудовищной сложности. Такая эквивалентность позволит распространить теоремы
теории автоматов на процессор.
Примерно так же то, что программа на языке высокого уровня компилируется в машинный код, не делает её саму написанной в машинных кодах.
Lavr wrote:или верное по сути утверждение, что любой процессор - это просто "конечный автомат" просто лично вам не добавит понимания?
Мысль была - если заменить весь процессор эквивалентным ему конечным автоматом, это как минимум мне, а скорее всего - никому не добавит понимания.
Любой алгоритм может быть переписан на Brainfuck; но в полном соответствии с названии языка, понимания это не добавит.

P.S. А хаос как раз ничего не значит - бывают и недетерминированные конечные автоматы.