Не обязательно конкретно этот (хотя теоретически и его можно скомпилить). Речь о том, чт нужен нормальный тест конфигурации/характеристик прошиваемый в ПЗУ. Железячникам будет удобно.
Вид для печати
Есть какие-то новости про результаты-на реальном пентагоне?
Продолжил изучение схемы Пентагона и теста.
Импульс прерывания начинается на пересечении кадрового и строчного синхроимпульса. Будем считать, что он начинается на такте 0. Далее следует 16 строк кадрового синхроимпульса и 64 строки верхнего бордюра.
Длина строки 224 такта. Итого, до начала синхроимпульса первой строки экрана 80*224=17920 тактов.
Далее следует 32 такта (гашение, со строчным синхроимпульсом внутри) и 32+4 такта левого бордюра (4 такта, или 8 пикселей, добавляются в схеме для того, чтобы видео-контроллер заведомо успел считать из памяти данные пикселей и атрибутов).
Итого, от начала прерывания до первого пикселя экрана 17920+64+4=17988 пикселя. Первый пиксель экрана имеет номер 17988 (если считать с 0).
Цикл записи Z80 состоит из трех тактов, непосредственно запись в схеме Пентагона происходит во второй половине второго такта. Поэтому, уже в третьем такте цикла записи видео-контроллер сможет считать из памяти записанное туда значение.
Z80 реагирует на прерывание, если в последнем такте предыдущей команды сигнал INT уже в низком уровне. То есть, идеально выровненный кадр начинается не с первого такта, а со второго. Именно поэтому длительность процедуры прерывания теста 46 тактов, а не 45:
Код самого теста:Код:RAM:C086 IntSubSample: ; 1 + 19
RAM:C086 inc sp ; 6
RAM:C087 inc sp ; 6
RAM:C088 ei ; 4
RAM:C089 ret ; 10
Получается, что перед тактом записи выдерживается пауза: 46+8+10+4+7+20+WT-106+7+4+1=WT+1 тактКод:RAM:C018 Test:
RAM:C018 call AlignInt ; 46
RAM:C01B
RAM:C01B Loop:
RAM:C01B im 1 ; 8
RAM:C01D ld de, 4000h ; 10
RAM:C020 xor a ; 4
RAM:C021 ld (de), a ; 7
RAM:C022 ld bc, (WriteTackt) ; 20
RAM:C026 call WaitBCTackts ; WT-106
RAM:C029 ld a, 0FFh ; 7
RAM:C02B ld (de), a ; 4+1 Write!
Итак:
1. Выставляем в тесте значение 17983. Запись в память происходит на такте 17985. Видео-контроллер всегда успевает считать и атрибуты, и пиксели в тактах 17986 и 17987. Полоска на экране всегда есть.
2. Значение 17984. Запись в память - 17986. До начала первого пикселя контроллеру остается только 1 такт. В одном кадре контроллер считывает атрибуты, а в другом пиксели - полоска мерцает с частотой в 25 герц.
3. Значение 17985. Запись в память - 17987. Следующий такт - вывод первого пикселя на экран. Контроллер не имеет шансов считать записанное в память значение. В качестве пикселей берется значение считанное контроллером до записи в память на такте 17986 или 17985. Полоски на экране нет.
Как-то так.
Запустил на настоящем Пентагоне другой тест камрада Бобровского - btime. Скриншоты прилагаю.
Что любопытно, в схеме Пентагона нет выравнивания бордюра по границе пикселей. Данные попадают на экран непосредственно после записи в порт (плюс задержка на распространение сигнала). Поэтому точно выровнять полоску бордюра со знакоместом на экране не представляется возможным. Довольно заметная разница составляет приблизительно 0.5-1 пиксель. Этим же и обуславливается разрешение бордюра у Пентагона - бордюр можно менять только с точностью до такта, а в одном такте, как известно, 2 пикселя.
Lion17, на твоём пентагоне последняя часть Rage показывает ровно или со сдвигом на 1 или 2 пикселя?
Уверен на 100%, точного совпадения не будет. Но, чтобы выяснить на сколько именно будет смещение и в какую сторону, сейчас запущу.
---------- Post added at 13:56 ---------- Previous post was at 13:50 ----------
Да, результаты btime:
реальный Пентагон: 17762-17763 (слева-справа)
Старый ZX-Emul v0.31b: 17762 точно
Новый ZX-Emul: 17762 точно
Но, это и понятно - я подстраивал положение импульса прерывания под бордюрные эффекты. Теперь предстоит работа - вывести эмуляцию на расчетный уровень, так, чтобы учесть эффект работы видео-контроллера.
Запустил Rage. Замучился, пока поймал строго-вертикальную границу черного и белого сегментов. Спас режим серийной съемки в смартфоне.
Как и ожидалось, полного схождения нет. Изображение на бордюре примерно на пол-пикселя левее, чем на экране.
ЗЫ: Пока писал ответ и заливал фотки, вращение сегментов в демке остановилось! :)
Запись в порт бордюра (D43-TM8) в Пентагоне происходит при:
IORQ=0, A0=0, WR=0 по переднему фронту сигнала.
После того как была произведена запись, сигналы подаются на входы мультиплексоров цветов (D46/D47-КП2) с них сигналы выводятся на видео-усилитель.
Согласно, официальной доке по Z80, при цикле записи в порт, адресная шина устанавливается почти сразу в первом такте, в начале первой половины второго такта устанавливается IORQ, и немного позже (приблизительно 0.25 второго такта) сигнал WR. Задержка сигнала происходит на элементе D8.2 (ЛЕ1) и собственно при записи в D43.
Длина одного пикселя ~143ns. Задержка на элементе К555ЛЕ1 - 20ns, на К555ТМ8 - 30ns. Итого - получается больше трети пикселя. То есть, изменения на бордюре проявятся в начале первой половины 2 такта цикла записи. Что, согласуется с тем что разница в сигнале на глаз видна, как 0.5-1 пиксель.
Смещение бордюра будет зависеть от скоростных характеристик этих микросхем. Поэтому на разных сборках Пентагона оно может немного отличаться.
PS: Кстати, надо учесть и задержку распространения прохождения сигнала пикселей.
вполне возможно что разница в 1 пиксель возникает из-за того что значение бордюра и пикселей захватывается по разным фронтам импульса. Но не исключено что это особенность конкретной платы пентагона (конденсаторы и т.п.). Не факт что на других платах эта задержка тоже будет присутствовать. Для проверки нужны результаты и с других экземпляров...