Важная информация

User Tag List

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 34

Тема: Crash-test

  1. #11
    Veteran Аватар для Sinus
    Регистрация
    29.01.2005
    Адрес
    Belarus, Grodno
    Сообщений
    1,279
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Меня интересует вопрос прихода прерывания во время выполнения этой длинной команды.
    кстати интерестно как отреагирует на это реал.
    жалко что мой кай сейчас без моника...
    [target] [zemu] [js8x] [pouet] KAY-1024, 5''FDD, 3''FDD, HDD

  2. #12
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    хым,
    я вот так думаю.
    Команда LD IX,#ABCD не может быть прервана, так что прерывание не может на неё прийти. Однако что будет если перед #DD будет стоять ещё и #FD не знаю.
    Я тут всё пытаюсь отладить программу которая на реале бы проверила действие этого мегафрукта - набора префиксов команд. Как наберу скажу что и как.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  3. #13
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Судя по поведению некоторых эмуляторов, выполнение операций с префиксами не является атомарным (по меньшей мере, с точки зрения инфраструктуры эмулятора- иначе бы все затыкались). Вопрос о точке зрения процессора остается открытым.

    GriV,
    Проверь, плз на одинаковых префиксах и чередующихся- может быть разное поведение.

  4. #14
    Member Аватар для ARTi
    Регистрация
    06.05.2006
    Адрес
    Санкт-Петербург
    Сообщений
    127
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насколько я понял, приход префикса в префиксе уменьшает PC на 1 и все, при этом тратится 8 тактов. Соответственно, прерывания никто не запрещает, два префикса выполняются как команда уменьшения PC на 1.

    P.S. Кстати вдруг стало интересно. Засекали ли время выполнения команд, префиксирование которых ничего не дает? Например, команда EX DE,HL не превращается в EX DE,IX/IY, значит ли это, что, встретив "неверный" КОП для определенного префикса (в т.ч. и другой префикс кроме 0xCB), Z80 просто уменьшает PC на 1, отчего PC ставится на следующий байт сразу после префикса?
    Последний раз редактировалось ARTi; 30.01.2008 в 16:51.

  5. #15
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ARTi Посмотреть сообщение
    встретив "неверный" КОП для определенного префикса (в т.ч. и другой префикс кроме 0xCB), Z80 просто уменьшает PC на 1, отчего PC ставится на следующий байт сразу после префикса?
    Кстати, очень здравое и разумное решение, если это реально так. Логика действенна для 2 из 4 префиксов (#ED не может дублироваться, если мне не изменяет склероз). Вопрос о "стоимости" в тактах по прежнему открыт

  6. #16
    Member Аватар для ARTi
    Регистрация
    06.05.2006
    Адрес
    Санкт-Петербург
    Сообщений
    127
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если мне не изменяет память, в результате своих давнишних экспериментов на реале я выяснил, что:

    1. Последовательности вроде
    PC+0: #DD/#FD
    PC+1: #недопустимый КОП (в т.ч. #ED, #DD, #FD) поправка - к #ED не относится, см ниже
    PC+2: #xx
    в результате ставят PC на PC+1, tacts = tacts+8. Но на сколько увеличивается R - на 1 или 2 - я тогда, тупица, не посмотрел... предположительно на 2 все-таки. При этом сбоев функционирования прерываний при моих экспериментах я не заметил. Хороший, однако, Фаджин придумал "workaround"

    2. Последовательность
    PC+0: #ED
    PC+1: #ED/#DD/#FD
    PC+2: #xx
    работает как 8-тактный NOP, т.е. PC ставится на PC+2, tacts = tacts+8. Регистр R предположительно должен увеличиваться на 2, т.к. в данном случае никаких специальных действий (типа отката как в случае с #DD/#FD) не производится.

    Надо будет напридумать простеньких прожек для проверки, навроде таких, и хорошо попросить товарища DDp проверить (и сделать замеры) на реале .

    Добавлено через 15 часов 2 минуты
    Итак, начнем.

    Господин DDp или кто-нибудь еще! Если есть возможность, запустите, пожалуйста, на реале вот такие 2 программулины:
    Код:
    ORG     #8000
    LD      HL, 0
    XOR     A, A
    LD      R, A
    DI
    DB      #00         ; R += 1
    DB      #00         ; R += 1
    LD      BC, (#8000) ; R += 2
    LD      A, R        ; R += 2
    OUT     (#FE), A    ; R += 1
    JR      $-10        ; R += 1
    и
    Код:
    ORG     #8000
    LD      HL, 0
    XOR     A, A
    LD      R, A
    DI
    DB      #DD         ; R += 2 ???
    LD      BC, (#8000) ; R += 2
    LD      A, R        ; R += 2
    OUT     (#FE), A    ; R += 1
    JR      $-9         ; R += 1
    Как всегда, просьба замерить время между спадающими фронтами WR (короче, период). А также: в первом варианте бордюр должен быть постоянно одного цвета (вроде белого). Как ведет себя бордюр во втором варианте?
    Неприятный побочный эффект: через динамик будет слышен звук определенной частоты (~2 кГц) , т.к. содержимое регистра R полностью транслируется в порт #FE без изменений. Кстати, как частота тона будет отличаться во втором случае?

    Заранее спасибо за содействие!
    Последний раз редактировалось ARTi; 05.02.2008 в 17:49.

  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #17
    Master
    Регистрация
    21.08.2006
    Адрес
    Ижевск
    Сообщений
    910
    Спасибо Благодарностей отдано 
    20
    Спасибо Благодарностей получено 
    272
    Поблагодарили
    149 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ARTi Посмотреть сообщение
    Господин DDp или кто-нибудь еще! Если есть возможность, запустите, пожалуйста, на реале вот такие 2 программулины:
    ...
    Как всегда, просьба замерить время между спадающими фронтами WR (короче, период).
    Ага, при том, что у меня нет осцилла...
    Только потому, что мне это тоже интересно:
    var1 - 60 тактов,
    var2 - 56 тактов.
    Z0840004PSC (9011)
    Цитата Сообщение от ARTi Посмотреть сообщение
    А также: в первом варианте бордюр должен быть постоянно одного цвета (вроде белого). Как ведет себя бордюр во втором варианте?
    US0.36.7 ведёт себя также:
    var1 - бордюр белый (R+8),
    var2 - цвет "уменьшается на еденицу" (R+7).
    Цитата Сообщение от ARTi Посмотреть сообщение
    Неприятный побочный эффект: через динамик будет слышен звук определенной частоты (~2 кГц)
    ~14-15 kHz

  9. #18
    Member Аватар для ARTi
    Регистрация
    06.05.2006
    Адрес
    Санкт-Петербург
    Сообщений
    127
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Опа...
    Я похоже совсем в тот день пересидел на работе, что-то не совсем то написал, что хотел
    Однако все равно определенную часть картины это подтверждает. В случае с #DD/#FD + #ED никакого отката не происходит, все как и надо. А я что написал? Сейчас подправлю, приношу извинения за дезинформацию... R увеличивается как и надо, такты - тоже. Только я чего-то не въехал, почему частота-то такая большая?..

    Только потому, что мне это тоже интересно
    Если у Вас еще не пропал интерес, то теперь будет самое интересное . Просьба - та же:
    Код:
    ORG     #8000
    LD      HL, 0
    XOR     A, A
    LD      R, A
    DI
    DB      #00         ; R += 1
    DB      #00         ; R += 1
    DB      #00         ; R += 1
    EX      DE, HL      ; R += 1
    LD      A, R        ; R += 2
    OUT     (#FE), A    ; R += 1
    JR      $-8         ; R += 1
    и
    Код:
    ORG     #8000
    LD      HL, 0
    XOR     A, A
    LD      R, A
    DI
    DB      #00         ; R += 1
    DB      #DD         ; R += 2 ???
    EX      DE, HL      ; R += 1
    LD      A, R        ; R += 2
    OUT     (#FE), A    ; R += 1
    JR      $-7         ; R += 1
    В обоих ли случаях бордюр белый? Время между WR-ами одно и то же или разное?

    Ага, при том, что у меня нет осцилла...
    А как Вы это тогда делаете?

  10. #19
    Master
    Регистрация
    21.08.2006
    Адрес
    Ижевск
    Сообщений
    910
    Спасибо Благодарностей отдано 
    20
    Спасибо Благодарностей получено 
    272
    Поблагодарили
    149 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    var1: 48 тактов, бордюр белый.
    var2: 44 такта, цвет_бордюра-1.
    cpu: тот же.

    Цитата Сообщение от ARTi Посмотреть сообщение
    А как Вы это тогда делаете?
    А у нас так глаз пристрелявши.
    Вложения Вложения
    • Тип файла: 7z DDTEST2.7z (15.9 Кб, Просмотров: 179)

  11. #20
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Прочитал тред. Не смешно. Длинная команда выполняется как серия коротких это известно давным давно. Соответственно, если "длинная" команда после очередного выполнения затирает себя (например), то на следующей итерации выполняется уже модифицированная команда. И прерывания обрабатываются как после обычной короткой команды LDI.

    Короче: LDIR = LDI;PC=PC-2. И точка. Осциллографом тыкать сразу - нет чтобы доки почитать...
    Последнюю версию EmuZWin (2.7) можно получить по этой ссылке, а "официальная" страница с описанием здесь. Если что-то не пашет, берите там же версии 2.6 или старше. [B]

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Похожие темы

  1. test
    от Orionsoft в разделе Форум
    Ответов: 0
    Последнее: 02.03.2007, 17:17
  2. Test RAM
    от BYTEMAN в разделе Софт
    Ответов: 3
    Последнее: 05.04.2006, 20:45
  3. test
    от sicmaggot в разделе Программирование
    Ответов: 2
    Последнее: 19.07.2005, 18:20

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •