1 Отредактировано garnizon (09-02-2020 02:01)

Тема: Нестандартные режимы отображения

Все что я здесь напишу, никакого практического применения не имеет, просто интересно.

Помню, в то замечательное время, когда был жив Андрей Кулаков, мы часто  и по долгу разговаривали относительно всего связанного с Агатом. Он рассказывал как налаживали производство на ЛЭМЗ, какие были трудности и победы.
Рассказывал как заставляли мотор ес5088 крутить в другую сторону, типа защиты, чтобы в соседнем цеху не могли прочитать их диски... да много чего. 

Так вот один раз, я тогда не придал этому значения, он поведал об экспериментах над девяткой.
Конкретно о расширении режимов отображения. Что сменой какой-то прошивки и минимальными исправлениями на плате можно получить режим Т32 (такого-же как и прежде размера в видеоозу), но с возможностью задавать для каждого знакоместа цвет фона и цвет пера. Без мерцания и инверсии (последняя становится не нужна, ведь можно исполнить это регулируя цветами фона и пера). Еще говорил о Т64 в цвете, подробностей не помню, и что-то незначительное про граф режимы.

И мне вот подумалось, а ведь через USN к нам попала прошивка D65, где в второй половине (по схеме она не используется) что-то добавлено. Мы осторожно предположили что там группа палитр или реализация дополнительных режимов Apple для какой-то модифицированной генплаты. Но реально никто это не копал.



Хотелось бы узнать, какие мысли на этот счет есть у форумчан?

2

Re: Нестандартные режимы отображения

garnizon пишет:

... сменой какой-то прошивки и минимальными исправлениями на плате можно получить режим Т32 (такого-же как и прежде размера в видеоозу), но с возможностью задавать для каждого знакоместа цвет фона и цвет пера.

На мой взгляд, исправления на плате для этого нужны довольно большие. Там ведь с D66 подается всего 4 разряда, задающих цвет. А чтобы раздельно задавать цвет фона и пера, надо 8 разрядов. А главное, куда подавать эти дополнительные разряды?  Ведь у ПЗУ палитр (D72) все входы уже заняты, нужно либо ставить ПЗУ в 16 раз большей емкости, либо добавлять мультиплексор.

garnizon пишет:

Еще говорил о Т64 в цвете.

Если имелась в виду такая же схема атрибутов как в Т32, то для этого просто полосы пропускания ОЗУ не хватит. Нужно за время развертки строки (42,6 мкс) прочитать 128 байт. Это 3 Мбайт/с. У дисплейного контроллера есть только 2 Мбайт/с.

garnizon пишет:

И мне вот подумалось, а ведь через USN к нам попала прошивка D65, где в второй половине (по схеме она не используется) что-то добавлено. Мы осторожно предположили что там группа палитр или реализация дополнительных режимов Apple для какой-то модифицированной генплаты. Но реально не кто это не копал.

А точно речь про D65? Потому что D65, он же GGN - это очень простая штука. В агатовских графических режимах биты идут в одну сторону (старший бит выводится первым). В эппловских - в обратную сторону. И D65 в эппловских режимах просто пропускает все биты как есть, а в агатовских режимах она переставляет разряды местами (7-й бит становится нулевым, 6-й - 1-м и так далее). Плюс в режиме ЦГВР она еще переставляет биты так, чтобы 1-й бит цвета шел на выход Q0, а 2-й - на выход Q4.

Она работает фактически как мультиплексор. И как бы нет возможности что-то хитрое сделать в ее прошивке.

3 Отредактировано garnizon (09-02-2020 02:14)

Re: Нестандартные режимы отображения

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

Про Т32 -  видимо 4 бита назначали цвет как и прежде, а другие 4 назначали фон, там ведь есть бит инверсии, бит мерцания и два бита свободных. А уж как это аппаратно допиливали непонятно.

Не удивлюсь если использовали какую-то доп плату в слоте. 

Про Т64, помню только что пробовали СЧМ к нему адаптировать, видимо блочно по ячейкам цвет.
Кажется речь шла о цветах в другом участке памяти - возможно на типа как  ZX атрибуты отдельно?

Многое Андрей не успел рассказать к сожалению. А я невнимательно слушал.

4 Отредактировано avivanov76 (09-02-2020 18:52)

Re: Нестандартные режимы отображения

Я тут еще раз подумал, и получилось, что можно сделать режим Т32 с выбором цвета фона и пера. 16 цветов не получится, конечно, но выбор стандартных 8 цветов пера и 8 цветов фона сделать реально.

Для этого нужно:
1) перерезать дорожки идущие к ногам 15 и 16 D72
2) перерезать дорожку, идущую к ноге 3 D66
3) ноги 15 и 16 D72 соединить со свободными выходами D66 (18 и 20 ноги)
4) ноги 3, 19 и 21 D66 соединить с выходами D59, правда какими - не знаю, пока не разбирался с этим
5) заменить прошивку D72

Есть, правда, большое НО:
1) пропадет аппаратное мерцание в Т32 (инверсию можно сделать просто переставляя цвета пера и фона)
2) пропадет аппаратное мерцание и инверсия в эппловском режиме T40
3) во всех режимах полностью перестанет работать управление палитрами через адреса $C058-$C05B


***

Как сделать цветной T64 не добавляя ничего в схему - понять не могу. Дисплейный контроллер так построен, что читает память только 16-разрядными словами из двух смежных байт. Прочитать 2 байта (символ и атрибут) из разных областей памяти, как в Спектруме тут просто нельзя. Хранить где-то атрибуты, пока отображается блок символов, тоже нельзя.

Можно, разве что, по прерываниям переключать палитры, но тогда цвет будет меняться у всех символов строки сразу.


***

Насчет D65 пришло целых две идеи, как переделать ЦГВР в режим 256x256x8 цветов. D65 можно заставить не только переставлять биты, но и сразу выдавать 4-битные цвета. Правда, при этом еще надо сменить прошивку у D85, чтобы цветовые мультиплексоры были в правильном режиме.

1 вариант
-----------

На плате ничего не надо менять, кроме прошивок.
В каждом байте видеостраницы биты должны использоваться таким образом:

+---------+---------+---------+---------+---------+---------+---------+---------+
|    0    |    1    |    2    |    3    |    4    |    5    |    6    |    7    |
+---------+---------+---------+---------+---------+---------+---------+---------+
|пиксель 1|пиксель 2|пиксель 3|пиксель 4|Номер палитры пера |Номер палитры фона |
+---------+---------+---------+---------+---------+---------+---------+---------+

То есть, на каждый блок пикселей 4x1 можно задать 2 цвета. Причем, цвет каждого единичного пикселя берется из палитры пера, а нулевой - из палитры фона:

+---------------+-------------------+-------------------+
| номер палитры | Цвет палитры пера | Цвет палитры фона |
+---------------+-------------------+-------------------+
|        0      | Белый             | Черный            |
|        1      | Синий             | Желтый            |
|        2      | Зеленый           | Малиновый         |
|        3      | Красный           | Голубой           |
+---------------+-------------------+-------------------+

Цвета в палитрах не повторяются и выбраны по принципу дополнения. Внутри блока, конечно, не все возможные сочетания цветов доступны, но все 8 цветов можно использовать на экране одновременно.

2 вариант
-----------
Применить те же переделки, что и для режима Т32. Плюс еще поменять прошивку D84. Тогда четный байт видеостраницы будет содержать просто 8 пикселей, а нечетный будет задавать 8 цветов пера и 8 цветов фона.
То есть, на каждый блок пикселей 8x1 можно задать 2 цвета, причем без ограничений.

5

Re: Нестандартные режимы отображения

ДА, это что-то похожее на то, что я слышал. Там еще был разговор про многоцветный режим 128х256.
Но почему-то мне кажется что старые режимы тоже в полном объеме оставались (может ошибаюсь) - тогда выходит что точно какой-то отдельной "видеокартой"?

6

Re: Нестандартные режимы отображения

avivanov76 пишет:

Как сделать цветной T64 не добавляя ничего в схему - понять не могу. Дисплейный контроллер так построен, что читает память только 16-разрядными словами из двух смежных байт. Прочитать 2 байта (символ и атрибут) из разных областей памяти, как в Спектруме тут просто нельзя. Хранить где-то атрибуты, пока отображается блок символов, тоже нельзя.

Т.е. схему нужно сильно усложнять чтоб получить Т64 в цвете?
Выходит что они действительно использовали доп плату...

7

Re: Нестандартные режимы отображения

На этот вопрос трудно дать короткий ответ, потому что много всяких "если" и много вариантов :)

Вариант №1 - это попытаться сделать цветной Т64 по честному. То есть, чтобы в каждой строке было 64 символа и  64 байта атрибутов. На каждый символ - свой байт с цветом, как сделано в Т32.
В этом случае дисплейный контроллер должен за видимую часть строки (42,6 мкс) прочитать из ОЗУ эти 128 байт.
Сделать это без серьезных переделок схемы нельзя. Агат построен так, что за 1 микросекунду ДК может прочитать только 2 байта. То есть, за время 42,6 мкс он прочитает только 84 байта.

С переделками добиться чтения всех 128 байт можно:
а) поставив вдвое более быструю память и разогнав Агат в 2 раза. Не думаю, что такой вариант был возможен в начале 90-х
б) сделав внутри ДК кэш память атрибутов на 64 байта. Это должно работать так: в первой телевизионной строке мы только читаем 64 байта атрибутов в кэш и ничего не показываем на экране. Будет такая черная строка между рядами символов. Потом в обычном режиме читаются 64 символа, а атрибуты берутся из кэша. Потом берется следующая строка символов и все повторяется. Для этого варианта надо добавить несколько микросхем на системную плату и много чего переделать

***

Можно придумать много разных "кривых" способов.

Вариант №2 - попробовать "красить" группы символов. Если разбить строку на 16 групп по 4 символа и сделать у них общий байт атрибута, то, вроде как, мы укладываемся в пропускную способность памяти: 16 * (4 + 1) = 80 байт на строку.

Но тут проблема в том, что ДК читает 16-битными словами. Нельзя прочитать 1 байт атрибута, можно только 2 смежных байта. По факту получается 16 * (4 + 2) = 96 байт на строку. Тут есть способ выкрутиться: увеличить длительность видимой части строки до 48 мкс. НО! Поток данных получится неравномерный. Из-за чтения атрибута, ДК должен читать так: [слово атрибута] [слово символов] [слово символов]. Это займет 3 мкс. Вывод 4 символов занимает 2,66 мкс. То есть, на экране после каждой группы из 4 символов получится буквально черная "дыра" пикселя в 4 из-за того, что во входном регистре кончились данные.

Вариант №3 - сделать внешнюю плату, которая будет "перекрашивать" вывод ДК. Для этого придется повторить ДК на этой внешней плате, только он будет читать специальную память атрибутов, и перекрашивать сигнал, идущий с ДК. Этот вариант еще страшнее, потому что нужна куча микросхем, надо как-то синхронизировать эту плату с основным ДК, а сигнала 10,5 Мгц на системной шине нет. То есть, эта раскраска может еще и разъехаться по времени с ДК. А еще нужно отслеживать переключение режимов.

Наименее кривым был бы вариант №4 - не делать цвет, а просто добавить инверсию, используя для этого бит 7.
Но тут тоже нет простого решения. Если всякие палитры и режимы развертки можно менять просто перепрограммируя ПЗУ, то вот сигналы инверсии и мерцания сделаны в девятке в "железе". Ну и есть еще проблемка - пропадут маленькие буквы. Ну или будут выводиться с инверсией.

Так что я не просто так назвал эти варианты кривыми :)

***

Что касается внешней платы, то тут опять варианты.

Наиболее прямой способ - это сделать на внешней плате еще один ДК, вроде ячейки 121. Это позволило бы добавить новые режимы и не пришлось бы ничего резать на системной плате. Но что делать с софтом? Ведь никакой софт кроме СЧМ ничего про плату не знает и использовать ее не сможет.

Если же планировалось с помощью внешней платы расширять встроенный ДК, то это какой-то ночной кошмар инженера. Потому что пришлось бы что-то резать и паять на системной плате, а провода тащить на плату расширения. Как это делали бы обычные покупатели - совершенно непонятно.

8

Re: Нестандартные режимы отображения

> cигнала 10,5 Мгц на системной шине нет

В семёрке, в слоте X1, он таки есть. Ну не 10, а 5.25. Так, если кому надо...

9 Отредактировано LeoN (29-02-2020 22:08)

Re: Нестандартные режимы отображения

avivanov76 пишет:

С переделками добиться чтения всех 128 байт можно:
а) поставив вдвое более быструю память и разогнав Агат в 2 раза. Не думаю, что такой вариант был возможен в начале 90-х

Не поможет: ДК совершенно независимо работает-то на прежней частоте (10.5 МГц)!!!

Я разогнал до 3.5 МГц, а регистр адреса упреждающего чтения ДК обновляется с частотой 2 МГц, заборол я его - без артефактов.

Планирую в новоделе использовать цветной Т64, включение дополнительным битиком, ЭПС с выравниванием по 4 кБ.

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

10

Re: Нестандартные режимы отображения

Ну так никто и не говорил, что удвоением частоты все ограничится :) Надо будет еще подковырять прошивки почти всех ПЗУ в ДК (D61, D62, D84, D85), чтобы ДК начал читать в два раза чаще и этот цветной Т64 заработал.

11

Re: Нестандартные режимы отображения

avivanov76 пишет:

На этот вопрос трудно дать короткий ответ, потому что много всяких "если" и много вариантов :

Спасибо, все толково и подробно разжевано, а можно также покрутить другой вопрос:
Про 128х256 многоцветный (или 256х128 я что-то подзабыл как именно мне рассказали)?

12

Re: Нестандартные режимы отображения

Тут хорошо бы знать, какая именно задумывалась многоцветность.

Если такая, как в ЦГСР, то есть, честные 16 цветов у каждой точки, то тут всего 2 варианта.
Вариант №1 - 256x128. Его сделать без больших переделок нельзя по той же причине, по которой нельзя сделать цветной Т64: не хватит пропускной способности памяти. 256 точек по 4 бита - это 128 байт. Их надо прочитать за время видимой части строки (в графическом режиме - 48 мкс). Единственный способ этого добиться - ставить быструю память и разгонять всю схему (ну и прошивки конечно менять).

Вариант №2 - 128x256. Для него все нужное есть. Сделать его можно переделкой прошивок D84, D85.

Если многоцветность была "нечестная", то есть, задавался цвет на группу пикселей, то тут могло быть много вариантов. Про два возможных варианта сделать 256x256 в 8 цветах я уже написал здесь.

Еще можно было бы сделать цветность как в "Орионе-128": первый байт задает блок в 8 пикселей, второй задает 4 бита цвета пера и 4 бита цвета фона. Но для этого придется допиливать схему дисплейного контроллера, потому что значение второго байта должно быть доступно все время, пока выводятся 8 пикселей из первого байта. В схеме девятки просто некуда этот второй байт защелкнуть целиком. Есть только D66, но у нее 3 разряда уже заняты для других целей.

13

Re: Нестандартные режимы отображения

avivanov76 пишет:

Вариант №2 - 128x256. Для него все нужное есть. Сделать его можно переделкой прошивок D84, D85.

Т.е. там получится что строка в таком же формате, но количество строк в два раза больше?

14

Re: Нестандартные режимы отображения

Да, строчки должны быть как в ЦГСР, но сама видеостраница в два раза больше, и порядок строк такой же, как в ЦГВР: нечетные строки из первых 8 кб, четные - из вторых.

15 Отредактировано LeoN (06-03-2020 18:08)

Re: Нестандартные режимы отображения

avivanov76 пишет:

и порядок строк такой же, как в ЦГВР: нечетные строки из первых 8 кб, четные - из вторых.

Вероятно, наоборот.
Но PAR получится 8:3, что очень, ИМХО, коряво...

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

16

Re: Нестандартные режимы отображения

Да, четные с нечетными перепутал.
PAR, конечно, не самый удачный, но ведь у Apple ][ в HGR цветные пиксели тоже неквадратные, да и у Commodore 64 в режиме 160x200.
Другое дело, что 16-килобайтную страницу процессору ворочать тяжело, на ней только заставки показывать.

17

Re: Нестандартные режимы отображения

Интересно, как бы разработчики окрестили такие режимы?

Цветной Графический Средне Высокий  (128х256)

Цветной Графический Много Цветный (256x256x8)

:)

18

Re: Нестандартные режимы отображения

радиоволны как называли:
"длинные", "средние", "короткие".
потом дополнили: "ультракороткие"
потом русские слова длины законились и в ход пошли единицы измерения: "метровые" и "дециметровые".

англоговорящие же пошли ломать язык дальше: "low band", "very high freq", "ultra high freq". Потом и у них слова кончились и дальше они уже просто пишут: 800 MHz, 900 MHz.

потом цифры надоели и опять стали придумывать: S-, L-, C-, X- и Ku-band.........

19 Отредактировано garnizon (01-08-2020 21:02)

Re: Нестандартные режимы отображения

avivanov76 пишет:

Я тут еще раз подумал, и получилось, что можно сделать режим Т32 с выбором цвета фона и пера. 16 цветов не получится, конечно, но выбор стандартных 8 цветов пера и 8 цветов фона сделать реально.

А вот интересно, если бы разработчики озадачились реализацией такого режима, в дополнение к обычному.
И именно с 16 цветами для фона и 16 для символа.
Каким бы самым уместным могло бы быть распределение в байте, скажем с точки зрения программиста.

Т.е. вот в реальности так:
7   6   5    4    3    2   1   0
*   *  инв  Y  мер  B   G   R


Если придумать у дополнительного режима так:
7    6     5    4    3    2   1   0
B+  G+  R+  Y   Y+  B   G   R

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

Или вообще как-то по другому, скажем для легкой смены местами половинок байта, там самым просто достигая инверсии.


И как бы это могло быть реализовано, просто с точки зрения разработчика железа?

20

Re: Нестандартные режимы отображения

garnizon пишет:

А вот интересно, если бы разработчики озадачились реализацией такого режима, в дополнение к обычному.

Как уже раньше писал, пришлось бы схему менять довольно сильно. Напайкой перемычек тут не обойтись, понадобились бы дополнительные микросхемы. Схема девятки сделана с учетом того, что у символа 8 цветов и инверсия (которая путем периодического включения/выключения превращается в мигание). Для этого используются 4 бита, которые подаются на вход D72.

Чтобы сделать 16 цветов символов + 16 цветов фона и сохранить совместимость со старыми режимами надо как-то протащить все 8 бит. Для этого пришлось бы:
1) в параллель к D66 добавить еще один регистр. У D66 используется 6 входов, нужно еще 4. 10-разрядных регистров в 90-е не выпускалось.

2) переделать работу узла на D72. В девятке эта ПЗУ "смотрит" на значение текущего пикселя, приходящего из знакогенератора, (черный/белый) и "красит" его либо в тот цвет, который защелкнут в D66, либо в цвет, указанный в палитре и поступающий с D55.
Вариантов переделки два: увеличить ПЗУ или использовать рассыпуху.

Если увеличивать ПЗУ, то нужно минимум 5 дополнительных входов - 4 чтобы передать цвет фона и 1 под переключение режима. То есть, нужно ПЗУ 32Кx4. Таких в начале 90-х у нас просто не выпускалось.

Значит, нужно делать на рассыпухе. Например, поставить мультиплексоры 4x1 (пару 555КП12). У них два адресных входа, на первый подаем цвет пикселя, на второй - текущий режим (Т32 обычный/Т32 расширенный). Можно, кстати, вместо мультиплексоров поставить еще одну 556РТ13. Дальше 4 выхода уже заводим на D72. У D72 меняем прошивку, чтобы в текстовом режиме она не смотрела на текущий пиксель и ничего не красила (все будет покрашено мультиплексорами).

Ну и какая-то мелочевка еще понадобится, чтобы сохранить логику работы палитр, убирать признак мерцания, сформировать сигнал включения расширенного Т32 и, возможно, подкорректировать времянки. Как-то так.


Насчет назначения битов - с точки зрения разработчика можно сделать и так и эдак. Это чисто вопрос, какой выход регистра с каким входом мультиплексора соединить.

С точки зрения программиста - тоже не особо критично. Все равно под новый режим все процедуры вывода на экран придется полностью переписывать. Как я понял, неиспользуемые биты атрибутов еще с семерки использовались разработчиками под какие-то другие нужды. А если все новое, то зачем мудрить с перестановками бит?