Предварительное описание особенностей работы M-циклов:
- Каждый M-цикл отвечает за новый доступ к памяти. Поэтому, собственно, он и называется M-циклом.
- M1 отвечает за выборку кода операции. В общем случае длится 4 такта, но может увеличиваться до 6 тактов. Во время этого цикла выполняется текущая и завершается предыдущая стандартная АЛУ-операция.
- M2 отвечает за выборку байта смещения для индексной адресации. В общем случае длится 3 такта. Он используется как в методах адресации с индексными регистрами, так и в командах относительного перехода (JR, DJNZ). Если цикл используется в команде условного перехода, и условие не соблюдено, то является последним циклом команды.
В этом цикле после чтения байта смещения из памяти происходит его загрузка в ALUB, а младший байт адреса (PC.L или IDX.L) загружается в ALUA. После чего складывается младшая часть адреса и байт индекса. Далее устанавливается знак для следующей АЛУ-операции (плюс или минус) в зависимости от старшего бита байта смещения, если это команда относительного перехода.
- M3 отвечает за продолжение вычисления исполнительного адреса для индексной адресации. Обычно длится 5 тактов.
Так как этот цикл используется для вычисления исполнительного адреса, в нем блокируется доступ к внешней памяти по адресу, автоматически загруженному в PCR в предыущей команде.
В этом цикле полученный в АЛУ младший байта адреса сохраняется PC.L или WZ.L, затем в АЛУ загружается старшая часть адреса, и константа 0, для сложения со старшей частью адреса, и снова складывается и записывается в PC.H или WZ.H.
В результате, если это команда перехода, в регистре PC получаем новый адрес. Если же это команда индексной адресации, то в регистре WZ получаем исполнительный адрес.
- Циклы M2 и M3 могут быть пропущены, если команда не использует индексную адресацию.
- M4 отвечает за байтовый доступ к памяти в стандартных командах типа ADD A,(HL) или ADD A,(IX+nn). Обычно длится 3 такта.
- M5 пока не изучался, но, похоже используется в 16-битных командах, таких как ADD HL,dd, PUSH/POP HL, LD (nn),dd и т.д.
- - - Добавлено - - -
p.s.: Небольшая ремарка. Некоторые действия могут инициироваться в одном M-цикле, а завершаться в следующем, т.к. чуть ли не большая часть активности процессора всегда задержана на пол-такта или такт относительно такта, инициировавшего ее.




Ответить с цитированием