Вход

Просмотр полной версии : Аппаратная трассировка



Sonic
24.11.2006, 10:28
Работая на больших машинах мы уже привыкли к наличию режима аппаратной трассировки. Разговаривая с Caro по поводу синхронизации Magic с M1 в Пентагоне, навеялась мне идея...
Вот интересно, в случае двухбайтной команды (с префиксом) сигнал M1 вырабатывается два раза (для обоих байтов) или все равно один?
Если только один - а что если сделать схему, подающую NMI через определенное число сигналов M1? Вот вам и принцип работы пошаговой аппаратной трассировки на Z80. Работать это может например так:



Код на выходе из отладчика (предполагаем что остальные регистры
уже восстановлены):

LD A, #03 ;запрос NMI через 3 команды
OUT (#EC), A ;эта команда еще не считается (порт придумал на ходу)
POP AF ;восстанавливаем старое содержимое AF
;(лежит на стеке отлаживаемой программы) - 1 команда
RETN ;вернулись - 2 команда

Отлаживаемая программа (например):

LD A,(HL) ; вернулись сюда, эта команда будет выполнена (3 команда)
INC A ; перед этой командой будет NMI

caro
24.11.2006, 10:36
Вот интересно, в случае двухбайтной команды (с префиксом) сигнал M1 вырабатывается два раза (для обоих байтов) или все равно один?Все равно один.

PS. На самом деле не один, тут я ошибся :)

Sonic
24.11.2006, 11:07
Все равно один.
Круто! Значит - это возможно?

fk0
24.11.2006, 18:20
Все равно один.

Уверен??? По-моему на каждый байт КОП'а. Ни посмотреть негде, а память подводит.

ZEK
24.11.2006, 19:30
Все равно один.
На каждый байт КОП генериться сигнал M1 это обязательный атрибут машинного цикла INSTRD.

ZEK
24.11.2006, 22:25
Кстати посмоти осцилограмму что твориться в цикле подтверждения NMI, а то уже много раз натыкался что подтверждение NMI это цикл подтверждения INT + активный сигнал RD а в DS написанно что NMI Ask это холостой цикл INSTRD

caro
25.11.2006, 11:36
Уверен??? По-моему на каждый байт КОП'а. Ни посмотреть негде, а память подводит.Не зря говорят "век живи, век учись" :)
Абсолютно был уверен, что /M1 выдается только в первом цикле выполнения команды.
Наверное потому, что очень долго работал с КР580ВМ80 (I8080).
Там то КОПы все однобайтные и M1 выдается один раз в первом машинном цикле при чтении этого кода.
В Z80 действительно M1 является признаком чтения КОП, и в случае команд, имеющих несколько байт в КОПе (команды с префиксами), каждая операция чтения кода, являющегося частью КОП, сопровождается выдачей M1.
Для того, что бы окончательно удостоверится в этом, написал небольшой тест и снял осцилограмму:


ORG 8000h
DI
cikl: OUT (C),A
JP cikl


Развертка синхронизирована сигналом /IORQ