![]() |
|
|
|
|
|
#1 |
|
Master
Join Date: 9th February 2005
Location: Новосибирск
Posts: 924
Thanks: 0
Thanked 37 Times in 25 Posts
![]() |
Прочитал тред. Не смешно. Длинная команда выполняется как серия коротких это известно давным давно. Соответственно, если "длинная" команда после очередного выполнения затирает себя (например), то на следующей итерации выполняется уже модифицированная команда. И прерывания обрабатываются как после обычной короткой команды LDI.
Короче: LDIR = LDI;PC=PC-2. И точка. Осциллографом тыкать сразу - нет чтобы доки почитать... |
|
|
|
|
|
#2 |
|
Vitamin C++
Join Date: 14th January 2005
Location: Таганрог, Россия
Posts: 3,709
Thanks: 423
Thanked 1,343 Times in 759 Posts
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Это уж давно известно. Вопрос стоял про выполнение НЕ ИТЕРАТИВНЫХ команд, а именно цепочки префиксов.
|
|
|
|
|
|
#3 | ||||
|
Member
Join Date: 6th May 2006
Location: Санкт-Петербург
Posts: 127
Thanks: 4
Thanked 6 Times in 4 Posts
![]() |
Vladimir Kladov
Quote:
Quote:
Quote:
.А то будете как я 4-мя постами выше ![]() DDp Вы как всегда на высоте, примите мои благодарности (кстати, что я могу для Вас сделать?). Этот тест был на то, правильно ли мы думаем(ли) о командах, на которые префиксы #DD/#FD не влияют. Итого осталось уточнить, как реагируют префиксы #DD/#FD на длинную цепочку из самих себя. С тактами вроде ясно и с регистром R почти понятно, но на всякий случай лучше проверить. Это несложно. А вот с прерываниями будет небольшая рутина... Quote:
))Итак, продолжаем. (Может удобнее будет, если я сразу коды забабах*ю? ). Следующая пара прожек:Code:
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 Code:
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 |
||||
|
|
|
|
|
#4 | |
|
Activist
Join Date: 21st August 2006
Location: Ижевск
Posts: 452
Thanks: 3
Thanked 298 Times in 133 Posts
![]() ![]() ![]() ![]() ![]() |
Никаких "PC-=1"!
В обоих вариантах период 60 тактов. Цвет брдюра -= 5 (R+=11). (в US0367 аналогично) The Undocumented Z80 Documented (by Sean Young) так же подтверждает это: Quote:
|
|
|
|
|
|
|
#5 |
|
Vitamin C++
Join Date: 14th January 2005
Location: Таганрог, Россия
Posts: 3,709
Thanks: 423
Thanked 1,343 Times in 759 Posts
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
DDp,
Значит дело в некорректной эмуляции данной цепочки эмуляторами. Имхо, z80_ex (c) boo_boo делает это наиболее точным образом- прерывания перекрываются внутренним флагом процессора, а не физическим DoS
|
|
|
|
|
|
#6 |
|
Activist
Join Date: 21st August 2006
Location: Ижевск
Posts: 452
Thanks: 3
Thanked 298 Times in 133 Posts
![]() ![]() ![]() ![]() ![]() |
Vitamin,
вы о чём? Проверил на реале 2 последних фрагмента из поста #22. Какие прерывания? пошёл курить тему с начала.
Last edited by DDp; 9th February 2008 at 15:58. |
|
|
|
|
|
#7 |
|
Vitamin C++
Join Date: 14th January 2005
Location: Таганрог, Россия
Posts: 3,709
Thanks: 423
Thanked 1,343 Times in 759 Posts
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Изначально меня интересовало, как ведет себя процессор при выполнении особо длинной цепочки префиксов, в частности, поведение при приходе прерывания (см. первый пост).
ARTi для проверки идеи насчет уменьшения РС накидал примеры, косвенно проверяющие на основе изменения регистра R. Вот и все
|
|
|
|
|
|
#8 | |
|
Activist
Join Date: 21st August 2006
Location: Ижевск
Posts: 452
Thanks: 3
Thanked 298 Times in 133 Posts
![]() ![]() ![]() ![]() ![]() |
Quote:
(по-экспериментировал на реале) Во время длинной последовательности префиксов прерывания не срабатывают. US 0.36.7 внешне ведёт себя как реал (вот только вешается при SoundDrv=ds) |
|
|
|
|
| The Following User Says Thank You to DDp For This Useful Post: | introspec (12th November 2013) |
|
|
#9 |
|
Vitamin C++
Join Date: 14th January 2005
Location: Таганрог, Россия
Posts: 3,709
Thanks: 423
Thanked 1,343 Times in 759 Posts
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
В отладчик дает зайти? (см. сообщения GriV'а о поведении эмуляторов)
|
|
|
|
|
|
#10 |
|
Activist
Join Date: 21st August 2006
Location: Ижевск
Posts: 452
Thanks: 3
Thanked 298 Times in 133 Posts
![]() ![]() ![]() ![]() ![]() |
В отладчик входит (PC=FB01).
Пошагово последовательность префиксов выполняется как одна комманда. Отображается как попало (короткий буфер???). И ещё... На реальном проце поведение сигналов M1 и RFSH на последовательности префиксов такое же, как на последовательности NOP-ов. |
|
|
|
![]() |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
| Display Modes | |
|
|