- Расширитель палитры БК до 64 цветов (РПБК-64)
- [+] Старые сообщения (1)
-
? Alexander "Sandro" Tishin@ - 06.05.2020 14:54
Расширитель палитры БК до 64 цветов (РПБК-64)
¤
Необходимость:
¤
1) Отсутствие палитр в 0010, странный набор палитр в 0011М
2) Отсутствие программного переключения 256 ↔ 512 точек
3) Отсутствие режима 16 цветов
4) Сложности с выяснением текущей позиции луча на 0011М, невозможность на 0010
5) Нет кадрового прерывания на 0010
¤
Желательно:
¤
Минимум переделок; совместимость со штатными режимами 0010/0011М; использование контроллера памяти 1801ВП1-37 (64 байта в строке). Адаптация спрайтовой графики с минимальным вмешательством в код, а лучше – без оного.
¤
¤
Предлагается:
¤
Палитра 2/4 цвета из 64 возможных, либо непосредственно 16 цветов с фиксированным кодированием.
¤
¤
Регистры:
¤
177670 – регистр состояния, только чтение
177672 – регистр режима и грубой палитры, только запись
177674 – регистр точной палитры, только запись
177676 – резерв, Trap to 4
¤
Регистр состояния, биты:
¤
0..7 – номер очередной строки. Выводится номер текущей строки при нахождении на активном поле, либо номер следующей к выводу, если на поле гашения сигнала.
14 – горизонтальное гашение (HBLANK)
15 – вертикальное гашение (VBLANK)
¤
Остальные биты – нули (для удобного использования команды CMP при ожидании нужной строки)
¤
Регистр режима и грубой палитры, биты:
¤
0..2 – GRB цвет 0, старшие биты
3..5 – GRB цвет 1, старшие биты
6..8 – GRB цвет 2, старшие биты
9..11 – GRB цвет 3, старшие биты
12..13 – режим
14 – разрешение кадрового прерывания (дубликат 177662)
15 – выбор страницы для вывода на дисплей (дубликат 177662, только 0011М)
¤
Регистр точной палитры:
¤
0..2 – GRB цвет 0, младшие биты
3..5 – GRB цвет 1, младшие биты
6..8 – GRB цвет 2, младшие биты
9..11 – GRB цвет 3, младшие биты
12..15 – резерв.
¤
При записи в регистр режима и грубой палитры старшие биты цветов автоматически записываются и в младшие биты (в регистр точной палитры). Это позволяет при использовании 8 цветов не производить запись в регистр точной палитры.
¤
Переключение в расширенный режим производится любой записью в регистр режима. Переключение в исходный режим 0011М – любой записью в 177662(177663). Переключение в исходный режим на БК-0010 – ??
¤
При начальном сбросе (DCLO = 0) расширенный режим выключается.
¤
Режимы работы
¤
Все режимы работы имеют 64 байта в строке из соображений максимального использования оригинальной аппаратуры БК. Как и в оригинальной БК, изображение формируется из 16-битного слова, пиксели упорядочены слева направо с младших бит в старшие.
¤
Всего есть 4 режима, выбираемые битами 12 и 13 регистра режима:
¤
00 – 512 точек в строке, два цвета. Используются цвета палитры 0 и 1.
01 – 256 точек в строке, четыре цвета. Используется вся палитра.
10 – 256 точек в строке, 16 цветов блочный 8x1. Старший байт содержит два IGRB цвета, младший, побитово, соответствие пикселям. Палитра не используется.
11 – 128 точек в строке, 16 цветов, 4 бита (IGRB) на пиксель. Палитра не используется.
¤
Декодирование IGRB цвета в 6-битный GgRrBb цвет
¤
IGRB цвет представляется по схеме, принятой в CGA/EGA, то есть бит I используется в качестве младшего бита каждой из компонент: GIRIBI → GgRrBb
¤
Это позволяет получить 4 уровня яркости серого и два – остальных цветов, плюс получить более натуральный (66%, а не 100%) уровень насыщенности ярких цветов.
¤
Вывод на цветной монитор производится посредством трёх двухбитных ЦАП с линейной характеристикой (результирующая гамма – sRGB, т. е. С показателем степени 2,2).
Вывод на монохромный монитор производится посредством одного шестибитного ЦАП со следующим порядком перемежения бит: GRBgrb. Гамма та же.
¤
Программирование.
¤
Определение наличия расширителя рекомендуется производить командой TST @#177670. При отсутствии расширителя произойдёт Trap to 4.
¤
В случае, если достаточно использовать в палитре 8 базовых цветов, достаточно записи в регистр режима и грубого цвета. Пример:
¤
; установить режим 4 цвета чёрный – красный — зелёный — белый, экран 0,
; кадровое прерывание запрещено
MOV #17420,@#177672
¤
; установить режим 2 цвета синий — белый, экран 0,
; кадровое прерывание запрещено
MOV #71,@#177672
¤
; установить режим 16 цветов 8x1, экран 1,
; кадровое прерывание запрещено
MOV #120000,@#177672
¤
; установить режим 128x256x16 цветов экран 0,
; кадровое прерывание разрешено
MOV #70000,@#177672
¤
; установить режим 4 оттенка серого, экран 0,
; кадровое прерывание запрещено
MOV #17700,@#177672
MOV #7070,@#177674
¤
; установить режим 4 оттенка зелёного, экран 0,
; кадровое прерывание разрешено
MOV #54400,@#177672
MOV #4040,@#177672
¤
; погасить экран и запретить кадровое прерывание
CLR @#177672
-
? Alexander "Sandro" Tishin@ - 06.05.2020 14:57
Мультиколор!
¤
Предупреждаю сразу, код я только что написал из головы и не проверял. Но вроде работать должен.
¤
; Мультиколор с произвольным режимом и палитрой на строку
; с адреса 030000 должна располагаться построчная таблица значений
; регистров 177672 и 177674, всего 01000 (1024.) байт.
START:
; Запретим прерывания, выключим экран и обнулим прокрутку
MTPS #340
CLR @#177672
MOV #1330, @#177664
¤
; Подготовим изображение
CALL LOAD_IMAGE
¤
; Для начала, ждём целый новый кадр
¤
1$: TST @#177670
BMI 1$
¤
; Цикл отрисовки
; Поехали!
MAIN_LOOP:
; Счётчик строк
CLR R0
; Таблица построчных значений
MOV #30000, R1
; адреса регистров
MOV #177670, R3
MOV #177672, R2
MOV #177674, R4
; Ждем вертикальное гашение
2$: TST @R3
BPL 2$
; Пропустим ожидание 0 строки
BR 4$
; Цикл по строкам
3$: CMPB R0, @R3
; паранойя (а вдруг мы пропустили строку?) – так-то и BNE хватит ;)
BHI 3$
; должно быть гашение перед новой строкой – обновляем режим и палитру
4$: MOV (R1)+, @R2
MOV (R1)+, @R4
; тут есть немного времени; можно, например, положить звук в Covox
; как-то так (но тогда не забываем это делать и в других местах!):
; MOVB (R5)+, @#177714
; на следующую строку
INCB R0
BNE 3$
; Видимые строки закончились;
; У нас есть ~15К тактов на различные расчёты
CALL LOGIC
; На следующий кадр
BR MAIN_LOOP
-
? gid - 06.05.2020 19:10
177674,177676 - пультовый стек, аппаратные адреса 1801ВМ1. Если туда будет можно делать запись, то при нажатии кнопки СТОП и выполнении команды HALT будет происходить прерывание по адресу 160002 (опять же аппаратно для 1801ВМ1). И будут самые разнообразные глюки.
Если эти регистры будут доступны только по чтению, то пультовые команды START и STEP (которые есть и работают, хоть и не используются в повседневной жизни) будут вызывать глюки, доставая из пультового стека значения PS<-(177674), PC<-(177676), и отправляя БКшку в увлекательные путешествия.
Как бы ни хотелось, но лучше выбрать другие адреса, иначе мы лишимся псевдопультового режима, реализуемого с помощью контроллеров АльтПро.
Предлагаю адреса 177550-177556
или любые из диапазона 177520-177556 или 177140-177506.
-
? Alexander "Sandro" Tishin@ - 06.05.2020 22:29
Вот же ж блин! То-то ведь адреса знакомыми показались. А ведь я же сам делал перехватчик пультового режима, да. Совсем зашился уже :(
¤
А из каких соображений именно эти адреса? Ну и в любом случае, ниже 177400 что-то располагать боязно, а то есть любители туда ОЗУ, к примеру засунуть. ПЗУ Бейсика десяточного, опять же аж до 177577 достаёт, правда, неясно, почему так. Нули-то с 177532 идут, зачем там этот блудный байт?
-
? gid - 07.05.2020 09:58
Чота как обычно перепутал PS,PC, должно быть так: PC<-(177674), PS<-(177676)
А эти адреса полностью свободны потому что, там располагаются сугубо DECовские устройства, которые у нас не применяются, и на ДВК там тоже ничего нету.
Ну любители засовывать туда ОЗУ выкрутились. См. режимы контроллера СМК, там как раз ОЗУ полностью до 177600 достаёт, и все ячейки, которые приходятся на адреса портов и регистров просто должны быть предварительно обнулены. И всё работает как обычно.
А если рассчитывать на совместимость с ПЗУ бейсика, то тогда единственная возможность воткнуть свои регистры будет в адреса 177720-177776, у нас ведь не намечается мультипроцессорности вообще.
там полностью свободно 177720-177736, никто не заявлял вроде как об их использовании.
177740-177756 потенциально занято регистрами HDD контроллеров СМК
177760-177776 потенциально занято устройством Мультикарта от ММ, правда для этого устройства софт так и не написан, и использование его на БК под большим сомнением.
-
? gid - 07.05.2020 10:07
Забыл дописать, а если нули в ПЗУ с 177532, то там как раз получаются свободны диапазоны
177540-177546
177550-177556
177560-177556 - ИРПС
И если б не контрольное значение в 177566 для того чтобы КС ПЗУ была 0, то и 177570-177566 полноценно было бы можно использовать
И ещё есть огрызки 177534-177536 и 177570-177564, куда можно воткнуть какие либо одиночные регистры или пары рег.состояния-рег.данных
-
? Alexander "Sandro" Tishin@ - 07.05.2020 11:28
Понятно. Ну, мультипроцессорность на ВМ1 вообще весьма сомнительная вещь, и да -- её нет смысла делать. Даже какой-нибудь странный ускоритель на ВМ2 и то намного лучше будет.
¤
Сцепляться по адресам с СМК _очень_ не хочется. Потому как расширитель палитры -- это регистры, которые при активной работе с графикой нужны постоянно, в том числе и во время работы ОС, а не включил -- поработал -- выключил.
¤
Тогда выходит 177720? Без вариантов?
-
? gid - 07.05.2020 12:51
Почему без вариантов? 177550-177556 тоже замечательно подходит. Тут дело в том, как дешифратор адреса делать, чтобы как можно меньше корпусов занимал, если 177720 подходит лучше - то его использовать, а если непринципиально - то лучше использовать узкий диапазон свободных адресов, а широкий - оставить на перспективу
Досадно видеть, в моём предыдущем посте, я всё время мимо нужных цифр промахивался, там вообще всё неправильно, но надеюсь, общий смысл понятен. Там начальное число правильное, а конечное - обычно нет. А ведь когда писал - ничего не замечал такого.
-
? Alexander "Sandro" Tishin@ - 07.05.2020 14:33
Дешифраторы на группы 17755x и 17772x не отличаются ничем -- два нулевых бита и 11 единичных что так, что эдак.
¤
Но на 17755x надо как-то обеспечивать распознавание наличия расширителя, но при этом не ломать устройства, которые закрывают эти адреса и, тем более, считают свою контрольную сумму. так-то мой расширитель и поверх ОЗУ работать будет, если там нули. Читаемые и записываемые порты полностью разделены.
¤
Теоретически, разумеется, можно по начальному сбросу прятать регистр состояния -- больше доступных по чтению нет -- и делать доступным только после записи в регистр режима. Тогда это будет работать с Бейсиком и пр. Лишь бы по адресу 177550 были нули, и никто в адреса 17755x не писал, больше ничего не нужно.
¤
По сложности это максимум один корпус мелкой логики. Не катастрофа.
-
? grf@ - 14.05.2020 09:29
Как будет выглядеть аппаратная реализация? Не FPGA с 4мя процессорами?
-
? BD - 14.05.2020 14:45
grf@, хотят обойти ради одной демки, чтоб выставить на конкурс.. и изобести велосипед..
мало им, мало ))
¤
http://vak.ru/doku.php/proj/bk/vm3
-
? Alexander "Sandro" Tishin@ - 16.05.2020 08:16
grf@, как платка с несколькими (навскидку выходит чуть больше 10) ИС малой степени интеграции, 1533 серия. И чутка аналоговых деталей. Всё строго аутентично и в рамках технических возможностей второй половины 1980-х.
-
? grf@ - 16.05.2020 09:10
Как ее надо будет подключать к БК11М с СМК-512?
-
? Alexander "Sandro" Tishin@ - 16.05.2020 12:47
Так же, как к БК без СМК-512. Он тут вообще ни при чём.
¤
Подключение -- шина МПИ (AD0..15, SYNC, DIN, DOUT, WTBT, RPLY), сдвиговый регистр (4 линии), строб записи в 177662, частота 6 МГц. Ну и питание.
¤
Выход видео -- ну тут есть варианты. Либо подрубиться к существующим выводам, либо сделать разъёмы отдельно. Тут надо думать, что лучше.
¤
Борода МГТФ, ну а что поделать? Ну технически да, можно вместо этого сделать внешнюю платку на разъём МПИ и вывести на него нужные 6 проводов, вроде свободных выводов хватает.
-
? grf@ - 31.07.2020 05:45
Что-нибудь сдвинулось?
-
? Alexander "Sandro" Tishin@ - 17.08.2020 00:56
Я, увы, занят. Именно сейчас заполночь пишу.
¤
Есть проект в тетрадке. Общественности представлять пока рано.
-
? Alexander "Sandro" Tishin@ - 12.03.2021 18:30
Не прошло и года ...
¤
Времени делать особо не было, зато было время подумать. Так что я несколько передумал. В в первую очередь критична поддержка старого софта (игр в первую очередь) с возможностью раскрасить с минимальным вмешательством в код. Буквально пару недель мне в голову пришла мысль, как это сделать, так что я нарисовал упрощённую версию. Теперь произвольно выбирать 3 из 64 нельзя, зато можно править код почти людой ишроы без изменгения размера и вообще без вставок; сохраняется вариант 3 из 8 в любом сочетании, программное переключение в 512 точек, 4 оттенка серого или любого другого из 7 цветов, и это ещё не всен палитры.
Резать на плате ничего не надо, припаиваемся шлейфом к разъёму МПИ и ещё к 5 точкам на плате. Но лучше к 6 для нормального сброса, если у кого кнопка есть ;)
¤
Более строго:
* Заменяются 3 цвета, чёрный остаётся чёрным
* 8 базовых цветов
* 512 базовых палитр
* Градиенты в 4 уровня яркости (включая чёрный)
* Программное переключение между режимами 256 и 512 точек на строку
* Совместимость с БК-0010 и БК-0011М (пока без поддержки штатных палитр)
* Совместимость с имеющимся ПО
* Обратная совместимость нового и адаптированного ПО с исходной машиной
* Модификация большинства игр без изменения размера и функциональности машинного представления
* Блок подключается к шине МПИ и нескольким точкам на плате
* Никаких модификаций самой БК не требуется
¤
* Не более 15 ИС малой степени интеграции
¤
Уже нарисовал тракт данных, вышло ровно 10 корпусов мелкоты. Ещё пара на управление -- и всё. Осталось свести всё на одном листе, разложить управление на вентили, и можно делать пробную разводку цифры.
¤
Не факт, что это имеет смысл пускать в серию, но я всё же хочу довести проект до логического завершения.
¤
Да, полная карта палитр вот: http://sandro.pdp-11.ru/palext/bkpals1k.png
-
? bk-m - 28.05.2021 18:59
КР588ВТ1 - дешифратор любого адресного диапазона полностью совместимый с МпИ (с ВМ1) в том числе по временным диаграммам ... - и не надо никаких десятка 1533 ...
-
? a214 - 28.05.2021 19:58
... в смысле 16 цветков на 16К видео-ОЗУ БК-0010 за счёт десятка мелкосхем ? :):):) Нужен второй видеоконтролер почти полностью параллельный основному с регистром цветовой палитры: в минимальном варианте будет +2 бита (получится 4 бита на цвет) - по включению (сбросу) доп.регистр по нулям и ПОЛНАЯ совместимость со штатным режимом. Расцвечивание старых игр с минимальными переделками - естественно при наличии исходников с комментами, или авторами, или знатоками делавшими их дизасм ещё в давние времена ...
ОЗУ 16К как-то не очень - остальные разряды для переключения страниц ОЗУ и экранов (если ОЗУ много).
-
? microxa - 01.06.2021 23:19
>>в смысле 16 цветков на 16К видео-ОЗУ БК-0010 за счёт десятка мелкосхем ?
впринципе такое было реализовано, в какомто железном эмуляторе, использовалась идея двух паралельно работающих БК. Ну и дополнительно допиливался софт, в котором несложно со спрайтами.
...
В своем эмуляторе БК-0010 у меня идея организации shadows ram, доступной по записи в 100000-120000 таблица цветов примерно такая:
...
procedure CreatePixelTable;
const
¤
{ Foreground and background color constants }
..Black.........= 0;...dwBlack......= $00000000;
..Blue..........= 1;...dwBlue.......= $00FF0000;
..Green.........= 2;...dwGreen......= $0000FF00;
..Red...........= 3;...dwRed........= $000000FF;
//
..Cyan..........= 4;...dwCyan.......= $00808000;
..Magenta.......= 5;...dwMagenta....= $004080FF;
..Brown.........= 6;...dwBrown......= $00000080;
..LightGray.....= 7;...dwLightGray..= $00C0C0C0;
..DarkGray......= 8;...dwGray.......= $00808080;
..LightBlue.....= 9;...dwLightBlue..= $00FF8000;
..LightGreen....= 10;..dwLightGreen.= $0080FF00;
..LightCyan.....= 11;..dwLightCyan..= $00FFFF00;
..LightRed......= 12;..dwLightRed...= $008000FF;
..LightMagenta..= 13;..dwLightMagenta=$004892FF;
..Yellow........= 14;..dwYellow.....= $0000FFFF;
..White.........= 15;..dwWhite......= $00FFFFFF;
..
var
..data0,data1, bit, pix0,pix1,color, i,p,j: LongInt;
...//pix32tbl : PIntegerArray;
begin
....if pix32tbl = nil then
....pix32tbl := GetMemory(65535 * 32* 5);
.
здоровая таблица. 10MB. это 32битный цвет на 65553 битовых комбинаций да еще с запасом для программного x5 увеличения (для bit-perfecta).
.
Какие либо палитры тем более с доп. регистрами десятке не нужны. это не тот компьютер чтоб его усложнять.
касаемо же
>>16 цветков на 16К видео-ОЗУ БК-0010 за счёт десятка мелкосхем ? :):):)
Cтоит припомнить Ленинград, который хоть и клон зх, но с какойто шедевральнейшей схемотехникой...
В идеале у БК вообще надо выпиливать 'закрытый' 037.. и делать вот.. как нибудь рассыпушно. а то и вообще использовать решение как в ленинграде (наверно даже особого смысла нет наворачивать его до 16 бит)
.
И тут вот кстати вопрос вопросов, что проще накодить или спаять.. тем более что 16цветов на БК особо никому и не нужно.
-
? microxa - 01.06.2021 23:52
>>КР588ВТ1 - дешифратор любого адресного диапазона полностью совместимый с МпИ (с ВМ1)
ну подобный дешифратор реализуется на буферах защелках, что у бк стояли к589ир12, корпусом 555ид7, да диодами.
дело не в этом.. ущербен сам концепт мультиплексированой шины. Но 16 битной альтернативы нет даже у Intel: 8086-мультиплексирован как вм1, 8088 частично но тоже. Они осознали тупик лишь с выпуском 80286. там раздельные шины адреса/данных. Вот такой бы как раз пошел бы к видео-контроллеру ленинграда-х86. Если бы не одно но 80288 (чтоб с восьмибитной шиной данных, но с раздельным адресом) . вроде не было их у intel (разве что спецзаказ, для военки)
- << Форум