Рецептов конечно под каждый конкретный клон никто сочинять не будет .
Тады уж лучше DMA контроллер прицепить или какуюнить хрень выполняющую его функцию . Ибо цеплять такую штуку можно к любому спеку (так же как и видео контроллер :D ).
Вид для печати
о какой поддержке речь? Принцип подключения к Pentagon 1024SL v2.2 уже продуман, шикарная палитра выбрана.. правда не до конца пока ясно как сгруппировать биты в байте, чтоб было удобней считать при необходимости цвет - активность кодеров не очень высокая в предложении наиболее оптимальных и быстрых процедурок расчёта цвета.. :(
Но палитра просто классная, и главное - интуитивно понятная.
Модель представления предложенной Lethargeek'ом равномерной палитры.
1) берём две плоскости 8х8 и располагаем одна над другой;
2) на нижней по двум координатам откладываем значение R и B, на верхней - по обеим координатам значение G.
В результате получаем на обеих плоскостях из самых тёмных в самые светлые углы две диагонали равных уровней интенсивности, снизу RB - диагональ, а сверху аналогичную G - диагональ. При их сложении получим 8 оттенков серого, которые располагаются строго по диагонали, а с обеих сторон от диагонали будут цветные поля - с одной стороны с преимуществом красного, а с другой стороны от диагонали - с преимуществом синего, зелёный же распределён симметрично-равномерно в обеих половинах. Всё просто и интуитивно понятно. Правда если посчитать разрядность такой палитры, то она будет превышать на один бит палитру, которую можно адресовать байтом, т.е. фактически на плоскость RB отдаётся 64 комбинации из 32 возможных комбинаций ограниченных разрядностью 8bit-3bitG=5bitRB. Чтоб это выправить в плоскости RB равномерно сделаны 32 дырки - теперь количество оставшихся ячеек соответствует разрядности 5bit. Посколько дырки распределены равномерно на плоскости, то при конвертации полноцветного изображения даже если цвет попадает на дырку - всегда можно взять взамен любой из соседних вокруг дырки восьми оттенков, что позволяет максимально приблизить результат к оригиналу.
Сами места дырок автоматически формируются с помощью элементов жёсткой логики схемы цифро-аналогового преобразователя. Формулы вычисления разрядов r0, b0 в зависимости от композитного разряда rb0 и значений r2r1, b2b1 приведены ниже:
r0=((r2+r1)&rb0)+(rb0¬(r2+r1+b2+b1));
b0=((b2+b1)&rb0)+(rb0¬(r2+r1+b2+b1));
или:
r0=rb0&((r1+r2)+not(b1+b2));
b0=rb0&((b1+b2)+not(r1+r2));
Ниже слева RB плоскость из 64 ячеек, а справа - та же плоскость после выкалывания 32 дырок:
А побитовая раскладка - отдельный вопрос, мож правда кому нагляднее GGGRRBB(rb), хотя GRBGRBG(rb) удобнее, если например надо быстро яркость оценивать.
Добавлено через 3 минуты
Я ваще не смог представить, зачем на верхней плоскости по обеим осям G откладывать??? :v2_wacko:
Добавлено через 5 минут
Кубик нагляден, если просто 8 квадратиков рядом нарисовать ;)
во-во-во.. с этого места, и с примерами максимально быстрого кода пожалуйста.. при каккой раскладке можно сочинить наиболее быструю процедурку..
..господа программеры-демописатели примените свои навыки к пользе дела - выдайте варианты наиболее оптимального кодинга!!
Добавлено через 2 минуты
в верхней G плоскости имеем две одинаковые половины, расположенные симметрично относительно диагонали. Т.е. над более красной и над более синей половинками RB плоскости фактически находятся идентичные G палитры, а суммируя нижнюю и верхнюю плоскости получаем результирующий цвет :)
Ответ на мыло (на счёт DMA для 16ц/256ц).
Готовая схема как не странно есть , и даже есть хоть какая то поддержка . Тема уже была в железе , Velesoft предлагал юзать уже стандартную примочку из MB02+ http://velesoft.speccy.cz/data-gear.htm . Подключение в стиле муз сопра , без всякой резни . Ацкий компаратор можно заменить на рассыпуху . Пулять можно хоть в мозг , хоть в порт .
Итого 865 килобайт за кадр (1/50) !!!
Кстати там уже появились не убитые ацким пожатием ролики всяких дёмок и сами дёмки , а так же есть куча портретов Z80-DMA .
865 кб за секунду, за фрейм всего лишь 17, но все равно круто.Цитата:
Итого 865 килобайт за кадр (1/50) !!!
сайт внимательно не читал, но вдруг там возможно составлять списки для DMA, типа
а не трансферить по-очереди, типаКод:ld hl, dmaList
call loadListToDma
call waitDma
dmaList: db 1: dw A1, B1 ; db 1 - copy mem , dw A1,B1 - from A1 to B1
db 1: dw A2, B2
....
db 1: dw AN, BN
db 0 ; db 0 - list end
...Код:ld hl,A1 : ld de,B1 : call dmaTransfer : call waitDma
ld hl,A2 : ld de,B2 : call dmaTransfer : call waitDma
....
ld hl,AN : ld de,BN : call dmaTransfer : call waitDma
то в общем можно было бы делать всяко-разно фреймовые скроллы и еще кучу полезностей
хотя я наверное опять мечтаю...
Упс , опять я разбежался :D
Добавлено через 2 минуты
Значит с турбой на DMA уже жить можно :)
Добавлено через 5 минут
Думаю верно мыслишь , качни ролики , там явно ван фрем .
Добавлено через 7 минут
Единсственный облом -
В www.chip-dip.ru Z84C1008PEG
Норма отпуска: 10 шт.
Цена в розничной сети, руб.: 290.00
И ещё ждать хе зе сколько...
Ну вообще-то написано, что инкремент и декремент у источника или цели возможен, то есть перекинуть заранее сгенеренную табличку в порт вроде можно.
Вот только (кажись) дма ни в одном эмуляторе на данный момент не эмулируется.. Хотя мне кажется что применение ей найдётся и без расширенных экранов..
А на счёт фреймовости.. Даже при скорости 17кб/фрейм сложновато перекинуть 24 кб (размер экрана при режиме 256 цветов) за этот же фрейм..