регистром R можно мерять время условно
основная проблема что у регистра R всего 7 бит (128 значений)
им много не намеряешь (интервалы 512-1200+ тактов всего)
да и инкриментится он с разной скоростью
его можно пускать по одноподобному коду
тогда он дает более менее вменяемые результаты пригодные к использованию
можно использовать вместо счетчика когда нет свободных регистров
в атаче поделие в котором я как то юзал регистр R для измерения расстояния на которое пролетает луч
после там несколько низкоточных коррекций результата
и в итоге много артефактов
так же обработчик прерываний должен восстанавливать значение регистра
на некоторых эмулях у меня оно иногда восстанавливает с ошибкой
что как бы намекает на кривость эмуляции местами или какие еще то подводные камни
Последний раз редактировалось NEO SPECTRUMAN; 08.10.2019 в 22:49.
@goodboy выявил несовершенство моего теста - на его сером +2 тест то выдавал ошибку процессора, то не выдавал. Не выставил начальный TStates при заходе в тестовый цикл, и при определенных условиях за 2 секунды ошибка проца ни разу не ловилась. Исправил тест, если кому интересно:Z80CMOStst2.zip
goodboy (04.10.2022)
Снег законный, я же I в медленную память всунул. Правда, это тоже косяк) Надеюсь, тест не будет сбрасываться на некоторых машинах, т.к. теперь отрабатывает быстро.
- - - Добавлено - - -
Зато тест можно и на Спектрум 16кб запускать)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Исправил снег, и убрал регресс с CMOSZ80 (на нем тест повисал очень надолго):Z80CMOStst3.zip.
проверил на +2 и +2A ; бордюр чёрный, bug present
Spectramine (05.10.2022)
Эта тема мне навеяла воспоминание, что не так давно на оригинальных +3 был найден порт #ff. Кто помнит где про это написано было?
С какой целью интересуетесь? Вот тут я впервые упомянул эту фичу на этом форуме: https://zx-pk.ru/threads/23797-testi...l=1#post891256, ниже чутка обсуждение,
а потом в этой теме она была исследована на WOS:https://worldofspectrum.org/forums/d...le-with-a-2a-3. Кратко результаты:
1. It is found on different ports.
The formula for the port number is (1 + (4 * n) && n < 0x1000) (that is ports 1, 5, 9, 13 . . . 4093)
2. The bus always returns $FF if bit 5 of port 32765 is set (i.e. paging is disabled).
3. However, if bit 5 is reset, the port read returns the value currently read by the ULA ORed with 1 (i.e. bit 0 is always set).
4. During non-contended intervals (that is, when the ULA is drawing the border or during the four T states in between reading the two pairs bitmap+attribute bytes of the display file), the bus retains the value that was last read from contended memory (usually, the last attribute byte read) and not $FF, as would be the case on the 48K/128K/+2.
5. Reading and writing from/to slow memory pages by Z80 (including operation code fetching) affects on floating bus too. So, (the value of the last operation with slow memory (pages 4,5,67) by Z80 or ULA) OR 1, will be returned by reading of floating bus ports.
Порты, с которых читается плавающая шина +2А/+3, это вроде бы порты их параллельного порта, с шаблоном: Centronics port decoding (0000 ---- ---- --0-). С порта #FF читаться не будет.
drbars (11.10.2022)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)