С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Andrew771(21.10.2019)
Andrew771(21.10.2019)
спасибо!
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Обращение к портам у 48/128 не влияет на задержки, а тормозится задержками. Причем время задержки обращения к порту зависит от номера порта. Но чтение портов в процедуре обработки прерывания никак не тормозится, потому что происходит в начале кадра, когда до задержек ULA ещё далеко (они происходят во время вывода растра (основной картинки, закодированной пикселами/атрибутами), и вызваны чтением видеопамяти ULA-й).
У прерываний на Спектруме обычно нет никаких задержек. Пришел сигнал INT во время выполнения команды, и если прерывания разрешены, после выполнения этой команды идет вход в прерывание. Исключение для команд EI, префиксов #DD/#FD (и других префиксов (#CB и #ED) тоже, но другие префиксы не образуют цепочки, являются частью команд), и команд LD A,I/LD A,R на CMOS Z80 - после них подтверждения прерывания не происходит. (Поэтому если во время прихода INT выполнять цепочку из таких команд всё время активности INT, прерывание не произойдет, а обычно оно происходит после следующей за командой-исключением командой. Можно считать, что вход в прерывание задерживается командами-исключениями.)
- - - Добавлено - - -
Обычно есть. Стандартное время сигнала INT на 48м - 32 такта, на 128м - 36 тактов, за это время короткий обработчик прерывания, укладывающийся в это время с запасом, может выполниться дважды. Нормальные эмуляторы это эмулируют.
Последний раз редактировалось Spectramine; 27.10.2019 в 02:28.
я говорю про длину инта 300+ тактов
когда срабатывает даже большой обработчик по 2 раза...
ну и да
19 тактов вход в им2 обработчик
10 тактов рет
даже если обработчик будет просто инкрементить регистр 4 такта
то на оригинальном 48-м он отработает вполне нормально свой один раз
и все будет в шоколаде
а если юзать рети то в шоколаде все и на 128-м
...
то есть такая длина не с проста
нормальный полезный обработчик гарантировано больше инта
...но в отечественных поделиях
какая либо длина инта не гарантирована...
и смысол вешать на инт один рет? (разве что он иногда заменяется нопом)
даже так
повторное срабатывание такого обработчика сдвинет разве что мультикороры...
код синхронизирующийся по халту (для которого обработчик как раз может быть и один рет)
летать от этого тоже не станет..
Последний раз редактировалось NEO SPECTRUMAN; 27.10.2019 в 04:12.
Один RET быть не может, т.к. вход в прерывание запрещает прерывания, минимум EI:RET. 19+4+10=33. Такой на 128м может отработать дважды. И такие короткие обработчики бывают не так уж редко - когда от прерываний нужна только синхронизация с началом кадра. Попадались и в играх, и в демах.
- - - Добавлено - - -
Повлиять двойное срабатывание прерывания может на потактовые видеоэффекты (гигаскрины-мультиколоры), на запись RZX, на тесты таймингов, на генерацию биперного звука.
- - - Добавлено - - -
Самый смак, если поставить EI первой командой в обработчике. Тогда и на 48м будут двойные срабатывания, независимо от длины обработчика.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)