новый мегагигасуперкрутой эмулятор для буханки

emulators

Postby deathsoft » 10 Jul 2013, 00:01

Можно поразбивать команды, пишущие в порты/память, на такты, как это делал AloneCoder но не думаю что этохоть чтото изменит визуально (ну кроме одного теста который с точностью до такта считает), в деамх от этого ничего не изменится, т.к. с такой точностью мультиколоры в демах не используются.
User avatar
deathsoft
 
Posts: 4658
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 13 Jul 2013, 21:45

zxmak wrote:В пентагоне хитрая схема выборки аттрибутов/пикселов, которая меняет порядок выборки аттрибута/пиксела в зависимости от того было ли обращение к памяти в момент выборки.

Посмотрел схему пентегона и не заметил там такого. Триггер управления выборкой атрибуты/пиксели (DD15.2) никак не зависит от того обращался ли процессор к памяти или нет. Сигнал dis который зависит от того обращался ли процессор к озу или нет является всего лишь сигналом разрешения переключения триггера DD15.2 и сигналом разрешения стробов для регистров-защелок пикселей/атрибутов. Собственно DD6.2 является тем гейтом, который определяет режим работы триггера DD15.2 (если dis=0, то триггер работает в режиме хранения и никаких записей в защелки не происходит (DD9.1 ее блокирует), если dis=1, то триггер работает в режиме счета (постоянно переключается при каждом /cas)).

Другое дело, что после резета, DD15.2 не сбрасывается и продолжает считать подряд, т.ч. порядок выборки атрибутов/пикселей относительно обращений процессора к памяти может быть какой угодно.
User avatar
deathsoft
 
Posts: 4658
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 14 Jul 2013, 14:16

Ни и, кстати, про времянки пентагона есть хорошая картинка:
pentagon128ScreenTimings.gif
pentagon128ScreenTimings.gif (21.39 KB) Viewed 4814 times
User avatar
deathsoft
 
Posts: 4658
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby fk0 » 14 Jul 2013, 21:10

С тех пор, как киномафия и пожилые феминистки захватили в нашем старящемся обществе власть, главное, что они делают, это повышают consent age. Сейчас они планируют добраться до сорока восьми.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1533
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby zxmak » 16 Jul 2013, 09:33

deathsoft wrote:Посмотрел схему пентегона и не заметил там такого. Триггер управления выборкой атрибуты/пиксели (DD15.2) никак не зависит от того обращался ли процессор к памяти или нет.


зависит, еще как зависит. Я тоже на первый взгляд решил что не зависит, но когда симулятор таймингов по схеме пентагона начал писать, пришлось разобраться во всех сигналах, тогда и понял что зависит, заодно понял почему пентагон не требует вайтов (по той-же самой причине).
Софтовые тесты выполненные на железе пентагона подтверждают - зависит.
Last edited by zxmak on 16 Jul 2013, 09:46, edited 2 times in total.
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby zxmak » 16 Jul 2013, 09:35

deathsoft wrote:Ни и, кстати, про времянки пентагона есть хорошая картинка


на этой картинке совсем не видно особенностей работы триггера выборки аттр/пиксел. Кстати она служит плохим наглядным пособием к схеме пентагона, т.к. когда разбирал схему пентагона она мне мало чем смогла помочь. Чем она смогла помочь, это разве что сходу понять назначение некоторых счетчиков.
В пентагоне часть логики завязана на фронты сигналов и их задержке. Это на указанной картинке совсем не видно. По картинке все гладко и красиво, а на деле формирование развертки заметно сложнее.
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby deathsoft » 16 Jul 2013, 10:30

zxmak wrote:зависит, еще как зависит.

Это можно проверить в modelsim.

zxmak wrote:Я тоже на первый взгляд решил что не зависит, но когда симулятор таймингов по схеме пентагона начал писать, пришлось разобраться во всех сигналах, тогда и понял что зависит, заодно понял почему пентагон не требует вайтов (по той-же самой причине).

Ну, я нарисовал фрагмент схемы и переименовал клоки вида Cxx в нормальные названия сигналов (а также выходы счетчиков). Безвейтовость там только за счет того что есть 2 регистра ИР23 которые выполняют кэширование пикселей/атрибутов и запись в них идет в те моменты когда процессор физически не может обращаться к ОЗУ.

Например такты рефреша всегда отдаются видеоконтроллеру. Запись в кэширующие регистры делается по сигналу RAS, который до этого гейтуется несколькими вентилями.

Триггер отвечающий за пиксели/атрибуты всегда работает в режиме двоичного счета, либо хранения, другое дело что запись в память процессором может происходить в разные моменты времени относительно момента чтения данных из памяти в кэш-регистры, но порядок записи в эти кэш регистры всегда одинаковый. Порядок записи там либо ...APAPAPAP... либо ...PAPAPAPA... (какой конкретно, надо моделировать, ну или смотреть подробно соотношение всех сигналов), порядка ...PPA... или ...AAP... быть не может.

Когда ты программно процессором пишешь в память пикселей, то ты не можешь знать что именно сейчас выбирает контроллер атрибутов, A или P, и именно по этому и создается впечатление что "меняется порядок выборки". Т.к. ты можешь перезаписать прцессором еще не выбранные пиксели, либо перезаписать процесором пиксели которые уже были выбраны пидеоконтроллером (именно этим и объясняется мигание полоски когда запись идет "на гране"). Процессор со своей записью может вклинится либо между AP либо между PA, но работа триггера при этом совершенно никак не меняется.

Более того, для точной эмуляции надо еще учитывать, что пиксели и атрибуты выводятся на экран с задержкой относительно их считывания из памяти в кэширующие регистры. Запись в выходные регистры происходит по счетчику H2 (счетчик знакомест).
User avatar
deathsoft
 
Posts: 4658
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby zxmak » 16 Jul 2013, 23:08

deathsoft wrote:Порядок записи там либо ...APAPAPAP... либо ...PAPAPAPA... (какой конкретно, надо моделировать, ну или смотреть подробно соотношение всех сигналов), порядка ...PPA... или ...AAP... быть не может.


может, только не совсем так как ты написал. PPA и AAP быть не может, а вот PAPAxPAPA может.
Тут x означает что на этом такте выборка не происходит (должна была произойти выборка P, но вклинился процессор и поэтому смена значения триггера не произошла). Таким образом состояние триггера смещается относительно текущего такта.

deathsoft wrote:Когда ты программно процессором пишешь в память пикселей, то ты не можешь знать что именно сейчас выбирает контроллер атрибутов, A или P, и именно по этому и создается впечатление что "меняется порядок выборки".


deathsoft wrote:Процессор со своей записью может вклинится либо между AP либо между PA, но работа триггера при этом совершенно никак не меняется.


работа триггера еще как меняется, смотри на элементы D6.2 (за счет него и происходит приостановка смены состояния триггера) и D15.2, вот циклограмма:

процессор не обращается к озу:

Code: Select all
C25   11110000111100001111000011110000
C17   00110000000000000011000000000000
C18   00000000001100000000000000110000


процессор на каждом такте обращается к озу:

Code: Select all
С25   11110000111100001111000011110000
С17   00110000001100000000000000000000
С18   00000000000000000011000000110000


С25 - тактовая частота
С17 - выборка аттрибута
С18 - выборка пикселов

т.е. если процессор обращается к озу, то пентагон в течении одного такта не производит смену аттрибут/пиксел и продолжает выбирать тот-же байт что и на прошлом такте.
Таким образом, если начальный порядок выборки был [аттрибут, пиксел] и во время чтения было обращение процессора к озу, то текущие байты вычитаются в правильном порядке (но со сдвигом на такт). А порядок выборки для последующих байт меняется и следующие байты будут уже выбираться в порядке [пиксел, аттрибут]. Если процессор не обращается к озу, то порядок выборки байт не меняется. Начальное состояние триггера не определено и при переходе на новый фрейм не сбрасывается.
Эмулятор-виртуальная машина ZX Spectrum - ZXMAK2: https://zxmak2.codeplex.com/
User avatar
zxmak
 
Posts: 83
Joined: 26 Oct 2012, 02:25
Group: Registered users

Postby deathsoft » 17 Jul 2013, 08:00

zxmak wrote:может, только не совсем так как ты написал. PPA и AAP быть не может, а вот PAPAxPAPA может.
Тут x означает что на этом такте выборка не происходит (должна была произойти выборка P, но вклинился процессор и поэтому смена значения триггера не произошла). Таким образом состояние триггера смещается относительно текущего такта.

О чем я выше и писал, что порядок выборки поменяться не может (собственно это и подтвердило моделирование в modelsim), порядок остается всегда PAPAPA, только соотношение фаз плавает в зависимости от инструкции (о чем я тоже писал, что процессор может вклинится между выборками пикселей/атрибутов), но вначале всегда выбираются пиксели, а потом атрибуты (в моем случае так было, на самом деле это зависит он начального состояния триггеров).
Last edited by deathsoft on 17 Jul 2013, 08:09, edited 1 time in total.
User avatar
deathsoft
 
Posts: 4658
Joined: 07 Apr 2007, 00:58
Group: Registered users

Postby deathsoft » 17 Jul 2013, 08:04

zxmak wrote:работа триггера еще как меняется, смотри на элементы D6.2 (за счет него и происходит приостановка смены состояния триггера) и D15.2, вот циклограмма:

Я про это выше писал, что триггер либо переключается, либо работает в режиме хранения, но фаза выборки видеоконтроллером при этом поменяться никак не может, т.е. вместо пикселей атрибуты выбраться не могут и наоборот вместо атрибутов пиксели тоже выбраться не могут, другое дело, что момент выборки пикселей и атрибутов может плавать, но порядок их выборки всегда остается один и тотже.
Вечером скину графики из modelsim (для простоты тестировал на инструкции rst 38 (код FF), чтобы не эмулировать озу и пзу).
User avatar
deathsoft
 
Posts: 4658
Joined: 07 Apr 2007, 00:58
Group: Registered users

PreviousNext

Return to Эмуляторы

Who is online

Users browsing this forum: No registered users and 1 guest

cron