PC-01 Lviv http://pc01.lviv.ua/forum/ |
|
Палитра ПК-01 "Львов" http://pc01.lviv.ua/forum/viewtopic.php?f=2&t=154 |
Page 1 of 3 |
Author: | a99 [ 05 Jun 2012, 15:42 ] |
Post subject: | Палитра ПК-01 "Львов" |
Вынесено из темы "Запуск эмулятора ПК-01 "Львов" на Dingoo A320". Quote: Существует ли подробное описание принципа работы узла выбора палитры?
Посмотрите код эмуляции видеоподсистемы здесь или в драйвере "lviv" MESS. Код нередко понятнее описаний
|
Author: | sadfsdfsdaf [ 05 Jun 2012, 22:12 ] |
Post subject: | Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320 |
Quote: 1) Существует ли подробное описание принципа работы узла выбора палитры?
на этом сайте есть принципиальные схемы. в двух словах - там на логике собран генератор (на линии задержки), биты с порта и видеопамяти сигнал "делят", потом конденсатор, "выпрямитель" и дальше на линию цвета в телевизоре.
Code: private final static byte BLACK = 0; private final static byte BLUE = 1; private final static byte GREEN = 2; private final static byte RED = 4; // Calculates color value from palette port static byte compute_color_index(int port, int color) { byte Result=BLACK; if ((port & 0x40) != 0) Result^=BLUE; if ((port & 0x20) != 0) Result^=GREEN; if ((port & 0x10) != 0) Result^=RED; switch (color) {default: break; case 0: if ((port & 0x08) == 0) Result^=RED; if ((port & 0x04) == 0) Result^=BLUE; break; case 2: Result^=GREEN; break; case 3: Result^=RED; if ((port & 0x02) == 0) Result^=GREEN; break; case 1: Result^=BLUE; if ((port & 0x01) == 0) Result^=RED; break; } return Result; }P.S. sheet1.jpg http://content.wuala.com/contents/lvov_ ... t.rar?dl=1 корпуса D59 D60 D61 D62 (и дополнительно D29) на схеме - справа сверху |
Author: | Tim0xA [ 06 Jun 2012, 02:22 ] |
Post subject: | Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320 |
Вообщем-то я этот код и использовал. У меня он выглядит так - был притянут за уши к принципу формирования цвета Вектора и 16 разрядам цвета Динги. Цветам других эмуляторов соответствует, все вроде работает. Можно оптимизировать, но это сейчас неважно. Code: // Calculates color value from palette port word COL(byte color) { byte BLACK = 0; byte RED = 0x07; byte GREEN = 0x38; byte BLUE = 0xC0; byte Result = BLACK; byte port = PPI[0].Rout[1]; if ((port & 0x40) != 0) Result ^= BLUE; if ((port & 0x20) != 0) Result ^= GREEN; if ((port & 0x10) != 0) Result ^= RED; switch (color) { case 0: if ((port & 0x08) == 0) Result ^= RED; if ((port & 0x04) == 0) Result ^= BLUE; break; case 1: Result ^= BLUE; if ((port & 0x01) == 0) Result ^= RED; break; case 2: Result ^= GREEN; break; case 3: Result ^= RED; if ((port & 0x02) == 0) Result ^= GREEN; break; } return ((Result & 0x07) << 13) | ((Result & 0x38) << 5) | ((Result & 0xC0) >> 3); }Вопрос в другом... Вообщем-то реализация понятна. Но меня больше интересовал несколько другой аспект. Ну вот дают программисту "Львов ПК-01", ставят задачу написать софт. И сообщают, дескать, есть некий порт, куда записываешь некий байт и получаешь некую палитру. Но какой байт писать? Что его биты означают? Как палитра формируется? Какие цвета ты получишь? Ответов нет. Разработчики компьютера о чем-то же думали, когда это реализовывали, значит должен быть какой-то замысел. Обычно программисту не предлагается заглядывать в схему и в исходники эмуляторов, а имеется какое-то внятное описание. А здесь его не дают. В описании бейсика есть команда COLOR и таблица, где можно выбрать 7 палитр, но ведь некоторые же в кодах пишут - им как быть? Вот как получена симпатичная палитра в игре Арктика http://lvovpc.ho.ua/games/page.php?name=arctic ? Неужели тупым перебором? В бейсике это палитра №5, но что записать в порт, чтобы ее получить, когда ты программируешь в кодах? Выходит каждый программист решал эту задачу сам для себя. Кто-то решал, а кто-то нет. И возможно поэтому львиная доля игр, что я видел, так и остались в этих жутких кислотных RGB-шных тонах, потому что на палитры просто "забивали" и оставляли все "по-умолчанию". Ну це таке... Эмулятор и так работает. Но просто интересно... P.S. Вот у Вектора все было четко - есть палитра, есть соответствие физических и математических цветов, вес каждого цвета в байте и все понятно со слов. |
Author: | b2m [ 06 Jun 2012, 09:31 ] |
Post subject: | Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320 |
Quote: В бейсике это палитра №5, но что записать в порт, чтобы ее получить, когда ты программируешь в кодах?
Я посмотрел в отладчике, что выводится в порт 0С1h (поставил бряк на этот порт). Обработка оператора COLOR находится по адресу 0DE06h, там считываются три числа, потом получают индекс = второе*8+третье, а потом тупо по таблице берётся число и выводится в порт. Таблица по адресу 0DE54h такая:
Code: 0000: 8F 8E 8D 8C CA C8 D3 8F 0008: 85 84 9F 9E C3 C1 DA 85 0010: 8A 88 93 CF CE CD CC 8A 0018: 83 81 9A C5 C4 DF DE 83 0020: FF FE E5 E4 BA B8 A3 FF 0028: F5 F4 EF EE B3 B1 AA F5 0030: F3 F1 EA AF AE B5 B4 F3 0038: FA F8 E3 BD BC BF BE FA |
Author: | Zelya [ 06 Jun 2012, 10:59 ] |
Post subject: | Re: Палитра ПК-01 "Львов" |
Если посмотреть на рисунок, палитры не такие уж хаотические: |
Author: | liberation [ 06 Jun 2012, 12:40 ] |
Post subject: | Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320 |
Quote: И возможно поэтому львиная доля игр, что я видел, так и остались в этих жутких кислотных RGB-шных тонах, потому что на палитры просто "забивали" и оставляли все "по-умолчанию".
Нет, не все так просто! Я, к примеру, толком увидел "Львов" в цветах только в эмуляторе. А в годы былые он был у меня подключен к ч/б телевизору, поэтому о проблеме с палитрами я даже не задумывался. Думаю, не я один пользовался ПК-01 в таких условиях, и отсюда могут произрастать корни проблемы "все по-умолчанию".upd. Именно эта тема дала нам 101 твит! |
Author: | Tim0xA [ 06 Jun 2012, 15:13 ] |
Post subject: | Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320 |
Quote: в годы былые он был у меня подключен к ч/б телевизору, поэтому о проблеме с палитрами я даже не задумывался. Думаю, не я один пользовался ПК-01 в таких условиях, и отсюда могут произрастать корни проблемы "все по-умолчанию".
Логично. Кстати, я тоже писал свои первые бейсиковские игры для Вектора на ч/б телевизоре. Забавно было потом посмотреть, что получилось. Но у меня не было неожиданностей, т.к. я точно знал, какой цвет получу, какую бы я не запрограммировал палитру. Все было ясно из документации.Сегодня нам хорошо - мы как чародеи извлекаем скриншоты палитр, дампы из отладчиков и куски кода из эмуляторов. Палитра? Да вот же она, все просто! А "древние люди", писавшие для Львова (на Львове же!) пусть даже имеющие цветной телевизор, скорее всего подбирали подходящую палитру опытным путем. Ну например в бейсике, при помощи программы, которая записывает байты в порт 193, и тут же получали результат для разноцветных квадратов. Ибо словами принцип работы этого порта просто не описуем. Quote: Если посмотреть на рисунок, палитры не такие уж хаотические:
Картинка очень наглядна. Странно, что нет комбинации - все черные. Выходит нельзя было погасить весь экран, если используется более двух цветов. Зато можно выключать один или два цвета для некоторых пар палитр. Можно менять цвета местами, например палитры 8 и 24. Т.е. некоторые интересные эффекты можно было реализовать. Интересно, есть ли примеры софта, который динамически использует палитру? Демки какие-нибудь?
|
Author: | liberation [ 06 Jun 2012, 15:58 ] |
Post subject: | Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320 |
Quote: А "древние люди", писавшие для Львова (на Львове же!) пусть даже имеющие цветной телевизор, скорее всего подбирали подходящую палитру опытным путем. Ну например в бейсике, при помощи программы, которая записывает байты в порт 193, и тут же получали результат для разноцветных квадратов. Ибо словами принцип работы этого порта просто не описуем.
Эх, все идет к тому, чтобы писать очередное письмо [1, 2] разработчику этой чудо-ЭВМ! Еще какие-нибудь вопросы к творцу можете подкинуть? Quote: Интересно, есть ли примеры софта, который динамически использует палитру? Демки какие-нибудь?
У нас есть тема "Multicolor для ПК-01 "Львов", но фактической информации о подобном явлении у нас пока нет. Жанр демок для "Львова" не чужд, но из-за общей безалаберности мы ничего еще не выложили. Да и отсутствие полноценного эмулятора ПК-02 дает о себе знать. Однако недавно я находил маленькую демку, где что-то такое-этакое с цветами делается, надо будет ее обязательно выложить.
|
Author: | Tim0xA [ 06 Jun 2012, 16:30 ] |
Post subject: | Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320 |
Quote: Эх, все идет к тому, чтобы писать очередное письмо [1, 2] разработчику этой чудо-ЭВМ! Еще какие-нибудь вопросы к творцу можете подкинуть?
Если будут - обязательно озвучу Я пока еще мало с ним знаком. И так случайно "зацепился" Вообще вот как-раз такими фичами, особенностями, и интересна каждая ПЭВМ по-своему, что отличает их от себе подобных. Львов - отсутствием бордюра, прерываний, оригинальной палитрой. Вектор - аскетичным загрузчиком, скроллом, оригинальным форматом записи, глюками при программировании ОЗУ цвета (и тут палитра отличилась, будь она неладна! ).Quote: Однако недавно я находил маленькую демку, где что-то такое-этакое с цветами делается, надо будет ее обязательно выложить.
Демки выжимают максимум из железа. Любопытно было бы глянуть.Quote: Я посмотрел в отладчике, что выводится в порт 0С1h (поставил бряк на этот порт)
Я не нашел упоминания об этом в документации, но судя по схеме нулевое значение бита 7 этого порта должно выключать звук встроенного динамика. Однако у тебя в эмуляторе звук не выключается.
|
Author: | liberation [ 06 Jun 2012, 16:34 ] |
Post subject: | Re: Запуск эмулятора ПК-01 "Львов" на Dingoo A320 |
Quote: Quote: Я посмотрел в отладчике, что выводится в порт 0С1h (поставил бряк на этот порт)
Я не нашел упоминания об этом в документации, но судя по схеме нулевое значение бита 7 этого порта должно выключать звук встроенного динамика. Однако у тебя в эмуляторе звук не выключается. |
Author: | sas9568635 [ 06 Jun 2012, 17:41 ] |
Post subject: | Re: Палитра ПК-01 "Львов" |
А можно ли уведеть процедуры по переводу байта-цветности в пикселы (и наоборот)написанные на Паскале (дельфи)? Чтобы самому вело не изобретать?... |
Author: | liberation [ 06 Jun 2012, 18:27 ] |
Post subject: | Re: Палитра ПК-01 "Львов" |
Quote: А можно ли уведеть процедуры по переводу байта-цветности в пикселы (и наоборот)
Наш НИИ сломал себе мозг в попытках понять, что это значит. Зачем эта процедура нужна?
|
Author: | sas9568635 [ 06 Jun 2012, 19:19 ] |
Post subject: | Re: Палитра ПК-01 "Львов" |
Quote: Quote: А можно ли уведеть процедуры по переводу байта-цветности в пикселы (и наоборот)
Наш НИИ сломал себе мозг в попытках понять, что это значит. Зачем эта процедура нужна?Надо эмулировать функцию OUT ($C2) (так вроде на экран выводитсяво львове) преобразовывать цвет-байт-Львова в 4-пиксела-(PaintBox: TPaintBox)... Думал может существует быстрый и эфективный перевод из одного в другое... Иль как это делалаеться в эмуляторах?... Code: ----T---T---T---T---T---T---T---¬ ¦ 7 ¦ 6 ¦ 5 ¦ 4 ¦ 3 ¦ 2 ¦ 1 ¦ 0 ¦ Байт экранного ОЗУ L-T-+-T-+-T-+-T-+-T-+-T-+-T-+-T-- ¦ ¦ ¦ L---+---+---+---* ¦ ¦ L-------+---+---* ¦ ¦ L-----------+---* ¦ ¦ L---------------* ¦ ¦ ¦ ¦ ¦ ¦ ¦ --+-T-+-T-+-T-+-¬ ¦ 1 ¦ 2 ¦ 3 ¦ 4 ¦ Пикселы на экране L---+---+---+----Также итересует какая-то таблица цетов что-ль... при каких ФОНОВЫХ цветах, какие возможны цвета пикселей... Хух.. ели выразился чего я хотел... надеюсь меня поняли. |
Author: | sas9568635 [ 06 Jun 2012, 19:37 ] |
Post subject: | Re: Палитра ПК-01 "Львов" |
Quote: Посмотрите код эмуляции видеоподсистемы url=https://code.google.com/p/qlv/source/br ... screen.cpp или в драйвере "lviv" MESS. Код нередко понятнее описаний
Видимо вот это оно и есть но я в СИ не бум-бум на ПАСе есть такое?
|
Author: | Tim0xA [ 09 Jun 2012, 12:01 ] |
Post subject: | Re: Палитра ПК-01 "Львов" |
При грамотном подходе даже при помощи 4 цветов можно творить чудеса. Впечатляет! |
Page 1 of 3 | All times are UTC+03:00 |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |