User Tag List

Страница 5 из 14 ПерваяПервая 123456789 ... ПоследняяПоследняя
Показано с 41 по 50 из 131

Тема: Баг формата SZX

  1. #41

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,966
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    314
    Поблагодарили
    237 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    M1 цикл - это машинный цикл в котором выбирается опкод инструкции.
    СЛЕДУЮЩЕЙ НОВОЙ инструкции

    Цитата Сообщение от Titus Посмотреть сообщение
    Префикс считается частным случаем опкода.
    бинго! стало быть, и инструкции

    Цитата Сообщение от Titus Посмотреть сообщение
    А конец инструкции (или начало следующий) в процессоре совершенно четко обозначен. В моем реверсе это сигнал RES_MCLK (последний машинный цикл инструкции).
    КЕМ обозначен, тобой? а с чего ты взял, что авторы именно это в виду имели?

    Цитата Сообщение от Titus Посмотреть сообщение
    M1-циклов может быть много, но RES_MCLK всегда один. По нему процессором и определяется, что инструкция закончилась, можно обработать запрос на прерывание или еще что-то в этом роде.
    я пока что вижу только, что "По нему процессором и определяется, что" + "можно обработать запрос на прерывание или еще что-то в этом роде." - не более

    - - - Добавлено - - -

    в смысле запрещения прерываний поведение законченной команды ei ну ничем от префиксов не отличается, пусть там даже флаги разные внутри, ну и что?
    могли сделать так, могли по-другому (а в каких-нибудь наследниках и клонах, может, и сделали)
    Прихожу без разрешения, сею смерть и разрушение...

  2. #42

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,392
    Спасибо Благодарностей отдано 
    1,701
    Спасибо Благодарностей получено 
    2,218
    Поблагодарили
    872 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    КЕМ обозначен, тобой? а с чего ты взял, что авторы именно это в виду имели?
    Мною обозначено его название.
    А авторами предусмотрен функционал - как маркер окончания одной команды и начала другой.

  3. #43

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,966
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    314
    Поблагодарили
    237 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    авторами предусмотрен
    ты приписываешь авторам свои мысли

    Цитата Сообщение от Titus Посмотреть сообщение
    функционал - как маркер окончания одной команды и начала другой
    никаких полезных функций у такого "маркера" я не вижу

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

  4. #44

    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,691
    Спасибо Благодарностей отдано 
    302
    Спасибо Благодарностей получено 
    223
    Поблагодарили
    159 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я чутка потерялся. А что будет происходить, если сделать длинную цепочку префиксов, и во время её отработки наступит момент прерывания. Когда оно отработает? В середине цепочки, или будет пропущено, и цепочка отработает до конца? Если в середине, то процессор будет помнить какой был последний префикс перед прерыванием, или потеряет?
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  5. #45

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,966
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    314
    Поблагодарили
    237 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    Я чутка потерялся. А что будет происходить, если сделать длинную цепочку префиксов, и во время её отработки наступит момент прерывания. Когда оно отработает? В середине цепочки, или будет пропущено, и цепочка отработает до конца? Если в середине, то процессор будет помнить какой был последний префикс перед прерыванием, или потеряет?
    на реальных Z80 - будет пропущено
    насчёт Z?80/eZ80 не помню
    Прихожу без разрешения, сею смерть и разрушение...

  6. #46

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,392
    Спасибо Благодарностей отдано 
    1,701
    Спасибо Благодарностей получено 
    2,218
    Поблагодарили
    872 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    Я чутка потерялся. А что будет происходить, если сделать длинную цепочку префиксов, и во время её отработки наступит момент прерывания. Когда оно отработает? В середине цепочки, или будет пропущено, и цепочка отработает до конца? Если в середине, то процессор будет помнить какой был последний префикс перед прерыванием, или потеряет?
    Если прерывание немаскируемое (NMI), то оно не может быть пропущено, т.к. фиксируется специальной схемой, способной уловить даже маленькие иголочки на входе. Любой перепад на входе NMI 0->1->0 будет зафиксирован, как запрос переывания, и после выполнения сверхдлинной команды будет отработан, и только потом снят. Единственное, что может отменить запрос NMI - это только RESET.

    Если прерывание маскируемое (INT), то оно может быть пропущено, если сигнал на входе INT пропал до того, как закончилась сверхдлинная команда.
    Мало того, запрос INT может быть пропущен, если длина запроса меньше одного такта процессора.

    Этот пользователь поблагодарил Titus за это полезное сообщение:

    Reobne(13.11.2024)

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

  8. #47

    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,103
    Спасибо Благодарностей отдано 
    1,337
    Спасибо Благодарностей получено 
    323
    Поблагодарили
    152 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Мне кажется, лучше считать, что никакого бага в SZX нет. Что сохранить снапшот можно только в тот момент, с которого легко продолжить выполнение не только в эмуляторе, но и на реале. Для усложнения нужны более веские причины, чем просто "так хочется".

    Сейчас и на реалах можно делать снапшоты, по немаскируемому прерыванию. Есть, правда, глюки, при некоторых SP. Ну и, получается, если всю помять забить префиксом, то тоже не сработает NMI.

    Эмуляторные извращения это весело, можно хоть любой такт сохранять, но во первых: "Зачем?", а во вторых: "Нафига усложнять запуск снапшота на реале?"

    Этот пользователь поблагодарил Reobne за это полезное сообщение:

    Dexus(13.11.2024)

  9. #48

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Spectramine Посмотреть сообщение
    Я так понимаю, #ED и #CB в вашей картине мира это тоже отдельные инструкции.
    вполне - инструкции перевода процессора в режим расширенных опкодов.

    - - - Добавлено - - -

    Цитата Сообщение от Titus Посмотреть сообщение
    M1 цикл - это машинный цикл в котором выбирается опкод инструкции. Префикс считается частным случаем опкода.
    А конец инструкции (или начало следующий) в процессоре совершенно четко обозначен. В моем реверсе это сигнал RES_MCLK (последний машинный цикл инструкции).
    M1-циклов может быть много, но RES_MCLK всегда один. По нему процессором и определяется, что инструкция закончилась, можно обработать запрос на прерывание или еще что-то в этом роде.
    Вполне логично, что процессор может вырабатывать дополнительные сигналы блокировки прерывания, чтобы исключить прерывание, когда это нежелательно. Но ведь возможность обработать прерывание не означает что процессор закончил выполнение инструкции, иначе прийдется все что находится между DI и EI или весь обработчик NMI/INT прерывания трактовать как одну большую инструкцию.

    - - - Добавлено - - -

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    Я чутка потерялся. А что будет происходить, если сделать длинную цепочку префиксов, и во время её отработки наступит момент прерывания. Когда оно отработает? В середине цепочки, или будет пропущено, и цепочка отработает до конца? Если в середине, то процессор будет помнить какой был последний префикс перед прерыванием, или потеряет?
    выполнение инструкции префикса переводит процессор в префиксный режим, в котором прерывания блокируются пока режим префикса не будет снят. Также как выполнение EI блокирует прерывания на одну следующую инструкцию.

    - - - Добавлено - - -

    Цитата Сообщение от Reobne Посмотреть сообщение
    Мне кажется, лучше считать, что никакого бага в SZX нет. Что сохранить снапшот можно только в тот момент, с которого легко продолжить выполнение не только в эмуляторе, но и на реале. Для усложнения нужны более веские причины, чем просто "так хочется".
    Дело в том, что если сохранять снэпшот только в тот момент, когда процессор не находится в режиме префикса, то не всегда будет возможность вообще сохранить снэпшот. В случае, когда вся память заполнена префиксом #DD или #FD, процессор перманентно всегда находится в префиксном режиме, не выходя из него. Поэтому это просто приведет к вечному зависанию эмулятора при попытке сохранить снэпшот. Такое поведение неправильное.

    - - - Добавлено - - -

    Цитата Сообщение от Reobne Посмотреть сообщение
    Сейчас и на реалах можно делать снапшоты, по немаскируемому прерыванию. Есть, правда, глюки, при некоторых SP. Ну и, получается, если всю помять забить префиксом, то тоже не сработает NMI.
    сохранение снэпшотов из обработачика NMI не всегда даёт рабочие снэпшоты, т.к. необратимо портит память и состояние процессора. Методы защиты от снятия снэпшотов с помощью TRDOS MAGIC или другого NMI обработчика на Z80 давно известны и в таких программах после нажатия NMI код программы будет испорчен и программа покажет сообщение о недопустимости выполнения NMI либо просто сбросится или перестанет работать.

    Эмулятор-же или железный отладчик (JTAG) должен обеспечивать отладку полностью прозрачно для отлаживаемой программы, никак не влияя на её состояние.

    - - - Добавлено - - -

    Цитата Сообщение от Reobne Посмотреть сообщение
    Эмуляторные извращения это весело, можно хоть любой такт сохранять, но во первых: "Зачем?"
    Затем, чтобы во время отладки можно было сохранить текущее состояние программы, пойти погулять, покушать, отдохнуть и на следующий день загрузить его и продолжить отладку с того-же самого состояния.

    Цитата Сообщение от Reobne Посмотреть сообщение
    а во вторых: "Нафига усложнять запуск снапшота на реале?"
    а как вы себе представляете корректный запуск SZX снэпштоа на риале, сохраненного после выполнения EI, т.е. с взведенным флагом EILAST?
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  10. #49

    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,103
    Спасибо Благодарностей отдано 
    1,337
    Спасибо Благодарностей получено 
    323
    Поблагодарили
    152 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Затем, чтобы во время отладки можно было сохранить текущее состояние программы, пойти погулять, покушать, отдохнуть и на следующий день загрузить его и продолжить отладку с того-же самого состояния.
    Ну, то есть, заходим в отладчик, а там PC указывает, допустим, на "LD (IY+0),L" Нажимаем на шаг вперёд и что мы увидим? PC увеличится на байт или на 3?

  11. #50

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Reobne Посмотреть сообщение
    Ну, то есть, заходим в отладчик, а там PC указывает, допустим, на "LD (IY+0),L" Нажимаем на шаг вперёд и что мы увидим? PC увеличится на байт или на 3?
    В этом случае отладчик установит точку останова на адрес следующий за "LD (IY+0),L" и запустит выполнение.
    Далее будет зависеть от того - дойдет ли выполнение до указанной точки останова - тогда отладчик остановится и покажет адрес на котором сработала точка останова.
    Если же управление до точки останова не дойдет, процессор так и будет продолжать работать выполняя все инструкции подряд.

    Поэтому однозначно сказать нельзя - будет зависеть от результатов выполнения кода. Также как нельзя сказать - вернет ли CALL или RST управление на следующий адрес или на следующий адрес + N или вообще не вернет управление или вообще не выполнится, потому что сработает прерывание.

    Однако если вы поставите точку останова на адрес PC, то при шаге/запуске отладчик остановит выполнение на адресе PC+1, т.е. будет показывать "LD (HL),L; NOP" и взведенный флаг префикса IY. Вообще конечно правильнее было-бы доработать отладчик чтобы он дизассемблировал память с учетом текущего состояния процессора и тогда он будет показывать все ту-же инструкцию "LD (IY+0),L"
    Последний раз редактировалось ZXMAK; 13.11.2024 в 07:43.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

Страница 5 из 14 ПерваяПервая 123456789 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Баг в W1793 (1818ВГ93).
    от xolod в разделе Клоны на ПЛИС, МК и БМК
    Ответов: 18
    Последнее: 19.03.2019, 14:18
  2. Баг в depacker от hrust1.3?
    от moroz1999 в разделе Программирование
    Ответов: 65
    Последнее: 17.04.2014, 10:39
  3. [Atari]баг игры NINJA?
    от denpopov в разделе Atari
    Ответов: 13
    Последнее: 16.03.2014, 07:20
  4. BUG in SZX snapshots ???
    от VELESOFT в разделе Эмуляторы
    Ответов: 1
    Последнее: 12.09.2009, 13:28

Ваши права

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