Вопрос про !M1 при чтении операнда
Moderator: Shaos
-
- Fanat
- Posts: 95
- Joined: 13 Dec 2020 21:11
Вопрос про !M1 при чтении операнда
Какое значение вывода !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
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.
-
- Admin
- Posts: 24083
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Вопрос про !M1 при чтении операдна
Ну вроде как аргументы инструкции считаются данными - M1 будет только у самой инструкции (и видимо префиксов)
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Doomed
- Posts: 665
- Joined: 01 Oct 2007 10:30
- Location: Ukraine
Re: Вопрос про !M1 при чтении операдна
1. M1 указывает, что это первый машинный цикл при выполнении какой либо инструкции.
2. M1 используется в обработке прерываний.
Если не изменяет память. Для Z80 карты Ориона М1 использовался для детекта инструкции EI/DE и эмуляции сигнала INTE (сигнал для бипера в Радио-86РК подобных компьютерах) ВМ80.
2. M1 используется в обработке прерываний.
Если не изменяет память. Для Z80 карты Ориона М1 использовался для детекта инструкции EI/DE и эмуляции сигнала INTE (сигнал для бипера в Радио-86РК подобных компьютерах) ВМ80.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
http://www.orion-ext.narod.ru
-
- Fanat
- Posts: 95
- Joined: 13 Dec 2020 21:11
Re: Вопрос про !M1 при чтении операдна
Спасибо! Схема упрощается! А у префиксов, кстати, не может не быть !M1 - когда процессор выставляет !M1 он ещё не знает - что там будет - инструкция или префикс.Shaos wrote:Ну вроде как аргументы инструкции считаются данными - M1 будет только у самой инструкции (и видимо префиксов)
Другое дело, что теоретически он может не выставлять его после префикса...
Вот в pdf как-то мутно написано. Можно по-разному трактовать, а все эпюры для однобайтных инструкций.Alekcandr wrote:1. M1 указывает, что это первый машинный цикл при выполнении какой либо инструкции.
Угу, INT (!IOREQ + !M1), в NMI не используется, насколько знаю.Alekcandr wrote:2. M1 используется в обработке прерываний.
Так я про то и написал - если при при команде с префиксом будет M1, то бипер будет поскрипывать на set 6,E / set 7,E; звучит странно - неужели "и так сойдёт"?Alekcandr wrote: Если не изменяет память. Для Z80 карты Ориона М1 использовался для детекта инструкции EI/DE и эмуляции сигнала INTE (сигнал для бипера в Радио-86РК подобных компьютерах) ВМ80.
OOPS! А я написал ZX-Card!
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Вопрос про !M1 при чтении операдна
masterspammer wrote:А у префиксов, кстати, не может не быть !M1 - когда процессор выставляет !M1 он ещё не знает - что там будет - инструкция или префикс.
Другое дело, что теоретически он может не выставлять его после префикса...
https://zxpress.ru/book_articles.php?id=1447M1 Machine Cycle 1 - Машинный цикл 1
Активный уровень - низкий. /M1 указывает, что в текущей
машинном цикле происходит чтение кода операции из памяти. При считывании кода
операции вида CB, ED, DD, FD вырабатывается ещё один цикл M1 для считывания второго
байта кода операции, т.е. сигнал /M1 активизируется дважды.
/M1 также активизируется вместе с сигналом /IORQ в цикле подтверждения
прерывания.

iLavr
-
- Doomed
- Posts: 665
- Joined: 01 Oct 2007 10:30
- Location: Ukraine
Re: Вопрос про !M1 при чтении операдна
masterspammer, вот тут можно предметно пожмакать, и получить ответ на вопрос.
Видимо будет поскрипывать, но для этого еще придется постараться.masterspammer wrote:то бипер будет поскрипывать на set 6,E / set 7,E; звучит странно - неужели "и так сойдёт"?
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
http://www.orion-ext.narod.ru
-
- Fanat
- Posts: 95
- Joined: 13 Dec 2020 21:11
Re: Вопрос про !M1 при чтении операдна
Lavr wrote:https://zxpress.ru/book_articles.php?id=1447...ещё один цикл M1 для считывания второго
байта кода операции, т.е. сигнал /M1 активизируется дважды.
/M1 также активизируется вместе с сигналом /IORQ в цикле подтверждения
прерывания.
Хорошая книжка! Спасибо!
Глянул в datasheet, вдруг я пропустил, но нет, там нет места про ещё цикл - сразу про подтверждения прерывания.
Alekcandr wrote:masterspammer, вот тут можно предметно пожмакать, и получить ответ на вопрос.
Спасибо, пожамкал! Итого:
* В итоге в течении чтения всей команды чередуются !RFSH и !M1 (вывод RFSH не выводится, но виден на кристалле), возможны перерывы на DMA, тогда точнее сказать, что будут чередоваться !RFSH, !M1 (при неактивном !IORQ) и !BUSAK; при упрощении формулы, естественно, !IORQ смотреть со стороны буфера, иначе можно поймать сигнал !IORQ от контроллера DMA.
* Команды без параметров таким образом друг от друга неотделимы - идёт ли команда с префиксом или две разные команды - не понять - нужно смотреть на шину данных и ловить префиксы, высчитывая длину команды.
* Может быть ещё разное про обработке команды HALT, но симулятор не умеет показывать её длительную работу (можно и на реальном железе потом посмотреть).
* Отдельная тема с !NMI - так как обработка немаскируемого прерывания на вид неотличима от [s]магии[/s] чтения команды, то решением будет задержать поступление !NMI до завершения команды (тут см. примечание про неотделимость команд) и тогда уже будет понятно, что сейчас обрабатывается прерывание.
Alekcandr wrote:Видимо будет поскрипывать, но для этого еще придется постараться.
На поскрипывание в общем-то плевать, а для более серьёзного применения, боюсь, требуется что-то посерьёзнее.
-
- Doomed
- Posts: 665
- Joined: 01 Oct 2007 10:30
- Location: Ukraine
Re: Вопрос про !M1 при чтении операдна
Я бы рассматривал Z80 как некую стейт машину (конечный автомат) без "магии", и тогда все станет проще и понятней.
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
http://www.orion-ext.narod.ru
-
- Fanat
- Posts: 95
- Joined: 13 Dec 2020 21:11
Re: Вопрос про !M1 при чтении операдна
Вопрос, как именно этот автомат устроен (вроде разобрался) - часть вещей-то можно сделать более чем одним способом.Alekcandr wrote:Я бы рассматривал Z80 как некую стейт машину (конечный автомат) без "магии", и тогда все станет проще и понятней.
...и как повторить в упрощённом виде этот автомат, если нужно точно отследить выполняемую команду. Довольно просто, кстати...
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Вопрос про !M1 при чтении операдна
Скажем так, любой процессор - это просто "конечный автомат"...masterspammer wrote:Вопрос, как именно этот автомат устроен (вроде разобрался)...Alekcandr wrote:Я бы рассматривал Z80 как некую стейт машину (конечный автомат) без "магии", и тогда все станет проще и понятней.
Но в чём цель топикстартера - не совсем понятно, с сигналом /М1 вроде как успешно разобрались.
iLavr
-
- Fanat
- Posts: 95
- Joined: 13 Dec 2020 21:11
Re: Вопрос про !M1 при чтении операдна
Тут не соглашусь; в теории процессор можно свести к формальному конечному автомату, но на более-менее современных мыLavr wrote:...
Скажем так, любой процессор - это просто "конечный автомат"...
получим множество состояний мощности как бы не больше числа частиц во вселенной и такое сведение будет тупиком
(понимания не добавит).
Другое дело - рассмотреть какую-то часть процессора как конечный автомат - полезно и логично; ну или не рассмотреть, а реализовать.
Есть одна задумка - совершенно безумная и бесполезная; напишу о ней детальнее, как спаяю прототип.Lavr wrote:Но в чём цель топикстартера - не совсем понятно, с сигналом /М1 вроде как успешно разобрались.
И мне там нужно детектировать часть команд, а для этого - отделять их друг от друга и от префиксов. Теперь понятно, как
и можно делать автомат (мелкая логика или простая 556РТ** и несколько триггеров).
То, как это сделано для "Ориона" выглядит ненадёжным (хотя для пищалки может и хватит), сначала я удивлялся простоте схемы,
потому у меня и возникли сомнения про активность !M1 после извлечения префикса - может я чего не понимаю и так делать можно?
Теперь понимаю, что при работе только 8080 кода проблем не будет, а в остальном "и так сойдёт".
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Вопрос про !M1 при чтении операдна
Давайте всё же определимся точнее, с чем вы не согласны: с тем что любой процессор - это просто "конечный автомат",masterspammer wrote:Тут не соглашусь; в теории процессор можно свести к формальному конечному автомату, но на более-менее современных мыLavr wrote:...
Скажем так, любой процессор - это просто "конечный автомат"...
получим множество состояний мощности как бы не больше числа частиц во вселенной и такое сведение будет тупиком
(понимания не добавит).
или верное по сути утверждение, что любой процессор - это просто "конечный автомат" просто лично вам не добавит понимания?
iLavr
-
- Admin
- Posts: 24083
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Вопрос про !M1 при чтении операдна
ну на самом деле если есть динамическая составляющая (как в старых NMOS-процах), то это уже не автомат никакой, а динамическая система с элементами хаоса, которую предсказать и полностью просимулировать невозможно
настоящие конечные автоматы это CMOS-процы, которые по даташиту могут работать от 0 Гц

настоящие конечные автоматы это CMOS-процы, которые по даташиту могут работать от 0 Гц
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Вопрос про !M1 при чтении операдна
Да ну нафиг... я почему и переспросил, поскольку мне было интересно, что подразумевается конкретным
человеком под фразой "конечный автомат".
По определению обычно это:
Процессор обычно так и рассчитывают, как "конечный автомат".
Потому как если число состояний бесконечно, ты его просто не рассчитаешь.
А вот всякие вещи типа:"динамическая система с элементами хаоса, которую предсказать и полностью просимулировать
невозможно" - это фигня, хорошо, что Интел не слышит...
Особенно "с элементами хаоса" - это просто ерунда.
человеком под фразой "конечный автомат".
По определению обычно это:
Конечный автомат — это некоторая абстрактная модель, содержащая конечное число состояний чего-либо. Используется для представления и управления потоком выполнения каких-либо команд.
Процессор обычно так и рассчитывают, как "конечный автомат".
Потому как если число состояний бесконечно, ты его просто не рассчитаешь.
А вот всякие вещи типа:"динамическая система с элементами хаоса, которую предсказать и полностью просимулировать
невозможно" - это фигня, хорошо, что Интел не слышит...

Особенно "с элементами хаоса" - это просто ерунда.
iLavr
-
- Fanat
- Posts: 95
- Joined: 13 Dec 2020 21:11
Re: Вопрос про !M1 при чтении операдна
Процессор, если анализировать его структуру, явно содержит ячейки памяти, у классического конечного автомата памятиLavr wrote: Давайте всё же определимся точнее, с чем вы не согласны: с тем что любой процессор - это просто "конечный автомат",
(кроме единственного значения - состояния) нет, так что он в лучшем случае - множество взаимодействующих конечных автоматов.
Тем не менее, несмотря на то, что по сути (по задумке изготовителя, структуре и т.д.) он не является автоматом, можно построить
эквивалентный ему конечный автомат, хотя он и будет чудовищной сложности. Такая эквивалентность позволит распространить теоремы
теории автоматов на процессор.
Примерно так же то, что программа на языке высокого уровня компилируется в машинный код, не делает её саму написанной в машинных кодах.
Мысль была - если заменить весь процессор эквивалентным ему конечным автоматом, это как минимум мне, а скорее всего - никому не добавит понимания.Lavr wrote:или верное по сути утверждение, что любой процессор - это просто "конечный автомат" просто лично вам не добавит понимания?
Любой алгоритм может быть переписан на Brainfuck; но в полном соответствии с названии языка, понимания это не добавит.
P.S. А хаос как раз ничего не значит - бывают и недетерминированные конечные автоматы.