PDA

Просмотр полной версии : ПК8000 - создание тестового ПЗУ и методики типовой проверки



cy6
18.11.2018, 12:25
Тестовое ПЗУ для ремонта, это все таки стандарт. В том числе и для "шагалки". Правильный набор кода, который помогает, а не усложняет проверку каждого элемента (будь то тестером, осциллографом или светодиодами). Сначала проверяются шины, затем более сложные проверки.

Предлагаю здесь предлагать мысли и идеи в эту сторону, что значительно упростит ремонт и создание новоделов.
Вставлять тест, можно вместо самой первой ПЗУ (из восьми).

С чего же начать разработку? Очевидно, что на схеме регенерации ОЗУ (и вывода на экран) нет специальных микросхем, которые нужно инициализировать и включить.
Следовательно, если этот блок включен постоянно, надо понять как его отключить, чтобы на шинах была тишина.
Верно ли я понимаю, и как это можно сделать?

Схема включения шагалки, видимо будет на одной из КТ, предусмотренной производителем. Верно?

cy6
22.02.2023, 21:28
Требуется ваша помощь, дорогие Гуру!

Сможет ли завестись орионовская шагалка (http://www.emuverse.ru/wiki/%D0%9E%D1%80%D0%B8%D0%BE%D0%BD-128/%D0%A0%D0%B0%D0%B4%D0%B8%D0%BE_05-90/%D0%9D%D0%B0%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%9F% D0%A0%D0%9A) на ПК8000?

Схема тут (http://www.emuverse.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:OrTstp2.png)


Принцип работы компьютера в пошаговом режиме состоит в том, что после нажатия кнопки “шаг” на входе RDY (готовность) процессора устанавливается высокий уровень и процессор начинает выполнять очередной машинный цикл. При окончании этого цикла и начале следующего фронт сигнала SYNC на выводе 19 процессора возвращает триггер пошагового устройства в исходное состояние и, установив на шинах адреса, данных и управления сигналы, необходимые для выполнения этого цикла, процессор переходит в режим ожидания, в котором находится до очередного нажатия кнопки “ШАГ”.

Если да, то как ее подключать?

Уже готова написать тестовое ПЗУ, понимаю как это сделать. Но толку от него будет мало без шагалки, в случаях средней и большой тяжести.

ivagor
22.02.2023, 22:03
Пока гуру не подключились вставлю свои пять копеек. У Ориона процессор при обращении к памяти и портам не тормозится, у ПК8000 - тормозится с использованием READY.

cy6
22.02.2023, 23:19
Пока гуру не подключились вставлю свои пять копеек. У Ориона процессор при обращении к памяти и портам не тормозится, у ПК8000 - тормозится с использованием READY.

Ну да, для этого и есть КТ на верхней плате, чтобы остановить на первой команде.
А вот как шагать дальше?

И также неясно, нужно ли оно вообще, торможение, при обращении к ПЗУ. Или его можно игнорировать, подключая лишь торможение шагалки.

- - - Добавлено - - -

ivagor, а зачем оно вообще применяется, торможение?
Ведь шины все равно заняты процессором всегда (режим ПДП не задействован), и регенерацию обслуживает сам процессор по прерыванию?

Возможно, по шагалке нужно зайти с другой стороны.
Если посмотреть на схему
78520

То это вроде уже готовая шагалка, синхронизированная по Sync-Strobe и по F1?
Есть КТ, которую можно не разрывать, а пропускать в нужный момент лишь один фронт 1=>0 (шаг).
Сам же фронт делает родная схема, выходит некий "феншуй" соблюдается.

Может из этого что то получится или бредятина?

- - - Добавлено - - -


Mick, этот подход оказался плодотворным, одна штука стала ясной. Теперь я уверен, что при выполнении программы из внутреннего ПЗУ и из памяти, подключенной к разъему расширения, на каждое чтение из памяти добавляется один такт задержки. Т.е. dad будет не 10 а 11 тактов, inx не 5 а 6 и т.д. Дополнительное подтверждение

Для чего же так сделано?


Видно, что режим вывода на экран на торможение внешней памяти (и скорее всего внутреннего ПЗУ тоже) не влияет.

:confused:

Все что удалось понять, что торможение как то связано с работой видео. Возможно, какой то совместный доступ к видео-ОЗУ или еще чему то.

ivagor
23.02.2023, 07:34
зачем оно вообще применяется, торможение?
Ведь шины все равно заняты процессором всегда (режим ПДП не задействован), и регенерацию обслуживает сам процессор по прерыванию?
При обращении к озу шины заняты процессором 1/3 или 1/4 времени, остальное время занимает видеоконтроллер (бордюр вынесу за скобки), который выводит изображение на экран и попутно регенерирует озу. Для арбитража доступа используется READY. Если бы разработчики очень постарались, они могли бы сделать прозрачный доступ процессора к озу в режимах 0 и 1, но не в 2 (максимум скорости достижимый для 2 - тормоза как в векторе). Можно только предположить, что компьютер и так уже получился сложный и дорогой и они не хотели дальнейшего усложнения и удорожания. Дополнительное торможение, которое есть и при обращении к озу и к пзу можно попробовать игнорировать, по крайней мере при обращении к пзу и возможно так заработает (заработает некая тестовая прошивка пзу, которая не будет трогать озу).
Насчет реализации шагателя в ПК8000 я лучше помолчу, т.к. не думал на эту тему.

cy6
27.02.2023, 01:19
При обращении к озу шины заняты процессором 1/3 или 1/4 времени, остальное время занимает видеоконтроллер (бордюр вынесу за скобки), который выводит изображение на экран и попутно регенерирует озу.
А точно ли только процессор считывает ОЗУ, а не и счетчики тоже?

На ША ОЗУ есть "задняя дверь" на мультиплексорах, в виде VD0..VD7, а также других сигналов, в противовес ША процессора.
Похожая "задняя дверь" есть и для РУ2 на его мультиплексорах, в виде VD3..VD7 (младшие 8 группируем).

Все что мне удалось найти на схеме, это два разделяемых ресурса, РУ2 и РУ5.
При этом, шины процессора не затрагиваются, у видео свои шины VD0..VD7 (шина данных, битмапа и указателей) и CD0..CD7 (шина цвета).
Процессор должен стоять в ожидании (READY), для чтения ОЗУ, пока не произойдет подключение моста MD0..MD7(выходная шина данных ОЗУ) => VD0..VD7 => ШД.
В качестве КПП моста, выступает буферная DD39.

Хотелось бы подробнее это все понять, где и что происходит.
Что в прерывании, а что на счетчиках (которые не останавливаются при отладке).

ivagor
27.02.2023, 06:41
А точно ли только процессор считывает ОЗУ, а не и счетчики тоже?
Я собственно и написал, что процессор меньше обращается к озу, в основном видеоконтроллер.

Что в прерывании, а что на счетчиках (которые не останавливаются при отладке).
Не понимаю, о чем речь. Есть процессор (и с прерываниями и без) и видеоконтроллер.

cy6
27.02.2023, 11:35
Не понимаю, о чем речь. Есть процессор (и с прерываниями и без) и видеоконтроллер.
Имела ввиду какую работу выполняет процессор по прерыванию, а какую видеоконтроллер (сердцем которого является генератор на счетчиках).

Как я поняла, большую часть времени именно видеоконтроллер обращается к памяти, иногда давая доступ процессору. Соответственно, задача регенерации тоже на видеоконтроллере?
А те волшебные байты "05 06 0D 0E 00", как именно они работают?
Кто нибудь заметил, что у ОЗУ циклические параметры VD0..VD7. Они (VD0..VD7) считываются из ОЗУ, по адресу, который может быть частично записан в VD0..VD7.
Ну и доступ на чтение к регистру 90-93 (DD35) у видеоконтроллера судя по всему есть. А значит, он может брать видео-адреса и перебирать в нужный для синхронизации с видеосигналом момент.

ivagor
27.02.2023, 12:29
задача регенерации тоже на видеоконтроллере?
Кроме написанного

остальное время занимает видеоконтроллер (бордюр вынесу за скобки), который выводит изображение на экран и попутно регенерирует озу.
добавить мне практически нечего. Особенности регенерации в режиме SCREEN 0 было бы интересно узнать. Неудачная попытка была (кажется в теме про исследование архитектуры), но я тогда не вникал в схему, а без этого за малое количество попыток не угадал. В этом вопросе карты в руки реальщикам.

ivagor
27.02.2023, 19:12
Что касается "магических" чисел в хвостах строк SCREEN 0, то с ними в первом приближении все не так уж сложно.
У РУ5 надо перебрать 128 адресов RAS за 2 мс. В активной области видеоконтроллер пробегает 80 (0-39 и 64-103) из 128 значений за 2 символьных или за 16 пиксельных строк (1024 мкс<2 мс, период регенерации соблюдается).
Остаются 128-80=48 значений: 40-63 и 104-127. Насколько понимаю, на бордюре сбоку в SCR0 выборка из озу тоже есть, но не "на все деньги", а скорее всего только 8 символов в конце строки. Поэтому записываем туда коды символов, которые обеспечат перебор оставшихся значений. Символы по 8 байт, значит: 40-47 - 05h; 48-55 - 06h; 56-63 - 07h; 104-111 - 0Dh; 112-119 - 0Eh; 120-127 - 0Fh
Остается один момент - штатное пзу в отличие от описания не записывает 2 из 6 значений (07 и 0F) в последние байты и все работает нормально. У этого есть простое объяснение, которое фактически уже написал ранее - последние 8 символов каждой строки и так выбираются, поэтому 07 и 0F не обязательны. Учитывая, что нужно обеспечить перебор 128 младших адресов можно использовать не только перечисленные значения, но и остальные с шагом 128 байт (16 символов). Т.е. вместо например 05 можно использовать 15h, 25h, ... F5h. И порядок служебных значений в конце строки может быть любой.
Не могу претендовать на истину в последней инстанции, но пока написанное не противоречит наблюдаемому на реале.
Мне немного стыдно, что несколько лет назад не понял такие простые вещи, но лучше поздно, чем никогда.

cy6
28.02.2023, 09:05
ivagor, я тут подумала что теорию (о независимом выводе на экран и регенерации видеоконтроллером) легко проверить двумя командами.

DI
HLT
Запрещаем прерывания процессора и вводим его в ступняк.
Если на экране будет все хорошо, значит теория верна. Значит процессор не нужен для этой работы, а только для инициализации.

Не показатель, конечно. Но на эмуляторе Виктора (https://zx-pk.ru/threads/27488-emu80-v-4.html?highlight=emu80) все сработало. :)

ivagor
28.02.2023, 10:47
теорию (о независимом выводе на экран и регенерации видеоконтроллером) легко проверить двумя командами
Какая же это теория, если это давно и многократно проверено на практике. Много классических игр (например ALIBABA, BINARY LAND, ERIC, NINJYA KAGE и т.д.) прекрасно работают при запрещенных прерываниях.

cy6
28.02.2023, 12:19
Какая же это теория, если это давно и многократно проверено на практике.
Я то в игры не лазила. А явно об этом никто не написал, или я пропустила.

Проверила на физике, все именно так и работает. Значит, магические байты нужны для видеоконтроллера. А задача процессора в прерываниях лишь инициализация работы видеоконтроллера.
На команду RET не обращайте внимания, она для "феншуя".
78538

Теперь интересно было бы двигаться дальше. Например, как работает неинициализированный видеоконтроллер.
Коли порты занулены, режим по умолчанию 1 (32/24). А вот с адресами в портах 90-93 интересный вопрос. Они же тоже нулевые.

ivagor
28.02.2023, 13:01
Если подходить не с практической точки зрения, а с академической, то некоторые вопросы с регенерацией еще ждут своих ответов.
Например:
1. Выполняется ли регенерация в интервалы верхнего и нижнего бордюров, и если да, то интересны некоторые детали.
1.1. Когда активная область заканчивается, то с какого адреса продолжается (если продолжается) выборка символов. Дальше до границы 1 (SCR1/2) или 2 (SCR0) килобайт, а потом заворот?
1.2. По тестам в кадре ПК8000 308 строк. (308-192)/8=14.5, т.е. целое число высот тайлов не укладывается. Это не принципиальная проблема, но источник возможных неоднозначных вариантов реализации.
1.3. В принципе регенерация на верхнем и нижнем бордюре не строго обязательна. Да, это грубое нарушение требований к РУ5, но скорее всего работоспособность так будет сохраняться.
2. По поводу выборки крайних (служебных) символов в SCREEN 0 тоже есть вопросы.
2.1. В строке 160 тактов. (160-40*3)=40 тактов остается на "бока". По тестам там (в отличие от активной области SCREEN 0) 4х тактные циклы, т.е. могли бы выбирать и 10 символов. То, что не меньше 8 - это точно, но есть небольшая вероятность, что 9 или 10.
2.2. В какие моменты выбираются эти боковые символы. До начала активной области (и потом заворот на начало), в конце "встык", в конце через 2 символа и потом начинается следующая строка или как-то иначе?

Я не к тому, что надо обязательно и срочно в этом разобраться, но подобные академические вопросы есть и их можно еще придумать.

- - - Добавлено - - -


Коли порты занулены, режим по умолчанию 1 (32/24)
Это интересный вопрос, который уже возникал в связи с портом 80. После ресета, как уже уточнили, порты ВВ55 на ввод, если бы при этом порты A, B, C выдавали нули наружу, то схема начального пуска в ПК8000 не была бы нужна, но она есть. Поэтому насчет видеорежима до инициализации ВВ55 не уверен.

ivagor
28.02.2023, 17:05
Кстати, если бы даже после ресета ВВ55 выдавала четкие нули наружу, на экране не было бы видно ничего содержательного (типа мусора), т.к. было бы активно гашение (порт 86).

cy6
01.03.2023, 14:24
Ага. Также, нужны сигналы с ВВ55: GRAPH (графический режим), K0 и K1 (А14 и А15 видео-ОЗУ). Они идут на верхнюю плату, прямо с порта.
Сигнал гашения DSCR используется только на нижней, для записи в РУ2 цветов, а также для включения/выключения выходных каналов цвета DD28-DD31.

Но синхра GI/ (КГИ+СГИ) должна присутствовать сразу, так как она ничем не ограничена. Как и сам "видеоадаптер" не выключаемый.
То есть, при неисправной нижней плате, мы должны видеть blank (пустой экран) с нормальной синхронизацией.
А вот при сбросе, интересное изображение появляется, напоминающее букву Н. :)

- - - Добавлено - - -

На реальной Суре. Набрала команды

screen 1
color 0, 0, 15
Получила такую же H.
Изменила цвет

color 0, 4, 15
При кнопке сброс, отображается с тем же цветом, вместо символов - мусор.
Ну тут понятно, цвет хранит РУ2 и сброс на него никак не влияет.

Получается, что стартует все таки в режиме 1?
Если где то в ПЗУ, не происходит временное переключение сначала в него, а потом в режим 0.

У меня цвет не подключен (ч/б и серый). На цветном все сразу должно быть очевидно.

ivagor
01.03.2023, 15:31
Получается, что стартует все таки в режиме 1?
Если где то в ПЗУ, не происходит временное переключение сначала в него, а потом в режим 0.
Если речь теперь про штатное пзу, то вернемся к началу инициализации (https://zx-pk.ru/threads/8140-pk8000-obshchie-voprosy.html?p=1173305&viewfull=1#post1173305)
В обоих вариантах по out 87h порт A (84) настроится на вывод и там будет 0, соответственно режим 1 (но штатная процедура включения режима не вызывается и не производится штатная для этого режима инициализация видеопамяти). Потом тратится некоторое время на разные действия и включается режим 0 уже штатной процедурой.

cy6
07.03.2023, 03:19
Получается, что стартует все таки в режиме 1?
Если где то в ПЗУ, не происходит временное переключение сначала в него, а потом в режим 0.

Пробежалась логическим пробником (ИЛЗ-01) и вот какая картина.

После включения ПЭВМ, выводы DD32 находятся в третьем состоянии (настроены на ввод).
Любые получатели сигналов с нее, получают только собственную входную подтяжку, если она у них есть.
Именно поэтому, горит светодиод ALF, который получает свой ноль с выхода инвертора DD1.2. А сам инвертор, на вход ничего не получает, но вход подтянут к логической единице.

Для видео режима, имеем такую картину: SYMB40=1, SYMB32=0. Кажется, что активен режим 0.
Но выход GRAPH, не буферизован логикой, и не имеет сигнала (Hi-Z). У адресатов с подтяжкой, он оказывается равен 1. А это значит, активен тот самый, никому неизвестный режим 3 (который скорее всего не существует, так как создает противоречия).

Итого, при удачном старте, режимы переключаются так: Режим 0/3 => режим 1 => режим 0.

Выбор ПЗУ происходит корректно, так как работает схема начального запуска. То есть, карта памяти с неинициализированной DD33 (в состоянии Hi-Z), отключена схемой начального запуска.

cy6
22.03.2023, 02:22
Теперь, после выяснения основных принципов работы ПК8000, можно сказать следующее.

1) Использование посторонних схем "шагалок", это мой личный бред. Встроенная шагалка уже есть.
2) Чтобы иметь возможность видеть не только первую команду, нужно ее доработать включением в разрыв КТ.
3) Сигнал READY, ничем кроме ПЛМ, генерироваться не должен никогда, поскольку процессор на ПК8000 полностью подчинен видеоадаптеру.
(Видеоадаптер состоит из генератора частот, формирователя сигналов на ПЛМ, шины цветности, видеопамяти и системы сериализации точек)
(Процессор управляется видеоадаптером с помощью тактовой частоты F1+F2 и сигнала торможения READY, то есть система разгон-торможение)
4) По нажатию кнопки "шаг", должно активироваться разрешение на пропуск только одного сигнала READY, формирование которого от нас не зависит.

Термин "видеопамять", здесь используется не как в стандартной инструкции.
По сути, вся ОЗУ является видеопамятью, в первую очередь. Потому что, окно видеопамяти можно установить на любую его область.
На железном уровне, видеоадаптер обладает исключительным правом доступа ко всей области ОЗУ.
А процессору только иногда разрешается туда заглядывать.
К тому же, процессор лазает туда через карту памяти, а видеоадаптер напрямую.
Видеоадаптер нельзя остановить, он обращается к видеопамяти независимо от состояния процессора. Так как видеоадаптер подчиняется лишь собственному генератору частот.


Возможно, по шагалке нужно зайти с другой стороны.
Если посмотреть на схему
78638
То это вроде уже готовая шагалка, синхронизированная по Sync-Strobe и по F1?
Есть КТ, которую можно не разрывать, а пропускать в нужный момент лишь один фронт 1=>0 (шаг).
Сам же фронт делает родная схема, выходит некий "феншуй" соблюдается.

- - - Добавлено - - -

Также, есть мысль по поводу тестового ПЗУ.

Конечно же, лучше всего ее подключать сразу через разъем расширения.
Но как быть с тем, что схема запуска принудительно выбирает встроенное ПЗУ при старте?
Которое, между прочим, может быть совсем неисправно.

Для этого, на нижней плате есть КТ, при разрыве которого выбор встроенного ПЗУ снимается.
А это значит, что на выставленные процессором на ША адреса, можно спокойно выставлять на ШД данные прямо с разъёма расширения.
Остается только доработать КТ, для автоматического ее "разрыва", при подключения внешнего картриджа ПЗУ.

Само собой, если ПЗУ тестовое, то первым делом нужно обнаружить ПЗУ встроенное.
А именно, его версию (1.0/1.1/1.2) и проверку контрольных сумм на блоке каждого чипа.

ivagor
22.03.2023, 06:45
К тому же, процессор лазает туда через карту памяти, а видеоадаптер напрямую.
Это на чтение, на запись процессор тоже напрямую.

cy6
22.03.2023, 09:03
К тому же, процессор лазает туда через карту памяти, а видеоадаптер напрямую.


Это на чтение, на запись процессор тоже напрямую.
Да, точно. Вне карты памяти. Карта памяти актуальна только для чтения.
WRRAM/ прямо вырубает дешифратор карты памяти (DD35).

Что касается записи в саму ОЗУ.
Единственное, что заходит напрямую, так это ШД процессора на входы (DI) ШД для записи в ОЗУ.
Но при этом, сигналы управляющие ОЗУ (RAS/ CAS/ WE/) формируются видеоадаптером.
ША для ОЗУ, также полностью контролируется видеоадаптером через мультиплексоры.

В итоге, процессор может поставить на ША и ШД что то для ОЗУ, и попроситься сигналом WRRAM/ записать в ОЗУ.
ШД подается на входы ОЗУ, но отсутствие управляющего сигнала WE/ на дадут им пропуска.
ША подается, но мультиплексоры не пустят ее на входы ОЗУ.

Это происходит потому, что ША одна, и ОЗУ, в один момент времени, может либо читать либо писать данные.
Поскольку, видеоадаптер читает данные (регенерация и поддержка изображения на экране) строго "по расписанию",
процессор ждет свободного "окна", когда запись будет выполнена.