Это уж давно известно. Вопрос стоял про выполнение НЕ ИТЕРАТИВНЫХ команд, а именно цепочки префиксов.
Вид для печати
Vladimir Kladov
Мне бы эту гениальную мысль, да лет 10 назад... а что теперь прошлое ворошить...Цитата:
Короче: LDIR = LDI;PC=PC-2. И точка.
Честно-честно?Цитата:
Прочитал тред
Ну-ну, зачем же так злобно... Лучше на работе долго не задерживаться, да спать побольше, а еще на людей, которые раздражают и злят, не обращать особого внимания, тогда и настроение гораздо лучше будет, и быть может производительность повысится до версии 2.8 (а то и 3.0) :).Цитата:
Осциллографом тыкать сразу - нет чтобы доки почитать...
А то будете как я 4-мя постами выше :biggrin:
DDp
Вы как всегда на высоте, примите мои благодарности (кстати, что я могу для Вас сделать?). Этот тест был на то, правильно ли мы думаем(ли) о командах, на которые префиксы #DD/#FD не влияют. Итого осталось уточнить, как реагируют префиксы #DD/#FD на длинную цепочку из самих себя. С тактами вроде ясно и с регистром R почти понятно, но на всякий случай лучше проверить. Это несложно. А вот с прерываниями будет небольшая рутина...
Круто! Я даже прочувствовал то самое давно забытое ощущение возбуждения от созерцания подобных полосок :)))Цитата:
А у нас так глаз пристрелявши.
Итак, продолжаем. (Может удобнее будет, если я сразу коды забабах*ю? ;) ). Следующая пара прожек:
иКод:ORG #8000
XOR A, A
LD R, A
DI
DB #FD ; R += 1
DB #DD ; R += 1, PC -=1, R += 1 ???
DB #FD ; R += 1, PC -=1, R += 1 ???
DB #DD ; R += 1, PC -=1, R += 1 ???
DB #FD ; R += 1, PC -=1, R += 1 ???
DB #DD ; R += 1, PC -=1, R += 1 ???
DB #00 ; R += 1
LD A, R ; R += 2
OUT (#FE), A ; R += 1
JR $-11 ; R += 1
Если все предполагалось верно, тогда в обоих случаях бордюр должен быть постоянно белым и кол-во тактов между WR должно быть 81. Чуть позже наваяю поверку прерываний.Код:ORG #8000
XOR A, A
LD R, A
DI
DB #DD ; R += 1
DB #DD ; R += 1, PC -=1, R += 1 ???
DB #DD ; R += 1, PC -=1, R += 1 ???
DB #FD ; R += 1, PC -=1, R += 1 ???
DB #FD ; R += 1, PC -=1, R += 1 ???
DB #FD ; R += 1, PC -=1, R += 1 ???
DB #00 ; R += 1
LD A, R ; R += 2
OUT (#FE), A ; R += 1
JR $-11 ; R += 1
Никаких "PC-=1"!
В обоих вариантах период 60 тактов.
Цвет брдюра -= 5 (R+=11).
(в US0367 аналогично)
The Undocumented Z80 Documented (by Sean Young) так же подтверждает это:
Цитата:
3.7. ... FD or DD should be seen as prefix setting a flag which says “use IX or IY in
stead of HL”, and not an instruction. In a large sequence of DD and FD bytes,
it is the last one that counts. Also any other byte (or instruction) resets this flag.
DDp,
Значит дело в некорректной эмуляции данной цепочки эмуляторами.
Имхо, z80_ex (c) boo_boo делает это наиболее точным образом- прерывания перекрываются внутренним флагом процессора, а не физическим DoS :)
Vitamin,
вы о чём?
Проверил на реале 2 последних фрагмента из поста #22.
Какие прерывания?
:v2_wacko: пошёл курить тему с начала. :v2_wink2:
Изначально меня интересовало, как ведет себя процессор при выполнении особо длинной цепочки префиксов, в частности, поведение при приходе прерывания (см. первый пост).
ARTi для проверки идеи насчет уменьшения РС накидал примеры, косвенно проверяющие на основе изменения регистра R. Вот и все :)
опа! интересно!Цитата:
(по-экспериментировал на реале) Во время длинной последовательности префиксов прерывания не срабатывают.
надо будет расконсервировать kay и убедиться воочию ;)
В отладчик входит (PC=FB01).
Пошагово последовательность префиксов выполняется как одна комманда.
Отображается как попало (короткий буфер???).
И ещё...
На реальном проце поведение сигналов M1 и RFSH на последовательности префиксов такое же, как на последовательности NOP-ов.