ZXNet эхоконференция «code.zx»


тема: Speccy Timings.



от: Vitaly Vidmirov
кому: Alexander Ageev
дата: 12 Dec 1998
Здрасте, здрасте Alexander! Однажды, в студёную летнюю пору, что-то около (10-11-98/00:59:05) писал как-то Alexander Ageev к Vitaly Vidmirov ... VV>> Что значит "про работу ULA"? Времянки, или отличия от, скажем, VV>> пентагона? AA> И времянки, и отличия от пентагона, интересует _АБОЛЮТHО ВСЕ_ про ULA. AA> У тебя есть информация по задержкам, формируемым ULO'й при обращении AA> к порту FE и разделяемой памяти ? AA> Предполагаемый вариант ответа: нет ;) потому как никто ни знает Вполне сносная инфа по ULA (естественно, с точки зрения программной эмуляции Спектрума) имеется в описалове к Лунтеровскому эмулю. Я уже кидал сюда выдержки из оного, но как выяснилось, её никто не видел ;) Так же некоторые сведения были подчерпнуты путем "выспроса" и "выпыта" у чехов (K3L). Вообще, спектрумы бывают 48, 128, +2 (= +2 + магнитофон), +2а (amstradовский +2), +3 (то же самое но с дискоглотом). Hе буду тут распинаться про то, что ULA работает на своей шине и со своим куском памяти. Это и так общеизвестно. Времянки, память. Времянки различаются только для 48к и 128к машин. Тачки +2а/+3 аналогичны 128-му (и +2), правда не во всём, т.к. были переработаны. 48к: |<- 224 ->| +---------+--+--+--+------- |/////////|rb|lb|hb| ^ ^ |<- 128- >|24|24|48| |192| |/////////|<>|<>|<>| | | +---------+--+--+--|--- | 312 | ^56 | | | | | #---------+--+--+--| | | ^64 | | | | | (~16 за кадром) +---------+--+--+--+------- # - появляние int'a (224 x 64 = 14336) итого 224 x 312 = 69888 для 128к: |<- 228 ->| +---------+--+--+--+------- |/////////|rb|lb|hb| ^ ^ |<- 128 ->|??|??|??| |192| |/////////|<>|<>|<>| | | +---------+--+--+--|--- | 311 | ^56 | | | | | #---------+--+--+--| | | ^63 | | | | | lb+rb+hb = 100 тактов, вероятно распределяются как 25/25/50. итого 228 x 311 = 70908 Естественно, такую с такой скоростью проц будет работать только тогда, когда он работает с fast памятью. При работе с разделяемой (slow) памятью процессор тормозится, пока ULA не сделает своё чёрное дело. Как известно, для 48-го slow память занимает адреса #4000-#7FFF. Для 128-х машин тормозными являются банки: для 128/+2: 1-3-5-7 для +2а/+3: 4-5-6-7 Степень затормаживания при обращении к slow памяти различна для разных машин: 48 -> 128(+2) -> +2а(+3) в порядке увеличения производительности. В среднем, обращения к slow памяти занимают на 15-20% больше. Если же и программа там, то торможение может достигать 25-30%. Hапример ld a,(#4000) будет длиться ~15 тактов (по инфе от Dron/K3L ;). Порты. in a,(#fe) происходит не сразу, и занимает ~12.25 тактов против 11-ти. Об out (#fe) я, честно говоря не помню, но _вроде_ не тормозит. Да, цвет бордер'а изменяется в момент засоса байта видеоданных, т.е. каждые 4 такта. Банки способны щёлкаться по: 128/+2: out(#fd),#1x, ровно как и по out(#0d),#1x +2a/+3: out(#fd),#5x. Глюк ULA Отдельно остановлюсь на причине, по которой нельзя класть в регистр I числа, такие, чтобы вектор был в slow памяти. Как известно, во время выполнения цикла m1 (извлечение кода операции) z80 выполняет регенерацию памяти, выдавая в младшую часть адреса регистр R, а в старшую I. ULA, видя что адрес лежит прямо в slow памяти, думает что проц хочет прочитать байт по этому адресу ... и в итоге, не справившись с такой частотой чтения пропускает каждый второй байт. Вместо него повторяется предыдущий. Этот глюк для 48 и 128/+2 не опасен - просто визуальные эффекты. В то время как на +2a/+3, программы тотчас же рушатся. Чё-то больше ничего вспомнить не могу :( злобный Виталик AKA Dark/X-Trade




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Вступление - новый номер газеты в двух частях.
ANOTHER WORLD - РС и работу софта
Юмор - что такое программист.
Совет от ГУРУ - Оптимизация программ по времени исполнения.
Отдохнём - HУ, ЮЗЕР, ПОГОДИ!

В этот день...   8 мая