Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 18

Тема: Вопросы по программированию

  1. #1
    Member
    Регистрация
    21.02.2011
    Адрес
    Воронеж
    Сообщений
    122
    Спасибо Благодарностей отдано 
    52
    Спасибо Благодарностей получено 
    39
    Поблагодарили
    13 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    Question Вопросы по программированию

    Всем привет.

    Прочитав документацию, не смог понять несколько моментов:

    1. Правильно ли я понимаю, что нет режимов записи в ГЗУ, при котором туда можно положить содержимое байта сразу, за один проход, с нулями и единицами ?
    И в цветовом и в плоскостном режиме записываемый байт играет роль маски, и нули не пишутся в ячейку ГЗУ, а оставляют биты на своих местах не тронутыми.
    Т.е. чтобы записать байт данных в одну из плоскостей ГЗУ, надо сделать две операции записи: одну для нулевых битов, другую для единичных ?

    2. Установка физического цвета в ЛУТ: в документации написано, что четвертым компонентом цвета будет интенсивность (I), которая берётся из текстового экрана.
    Т.е. чтобы получить I = 1, надо что-то записать в ячейку АЦЗУ, которая содержит символ в нужном месте экрана.
    Но ведь текст всегда выводится поверх графики ? Т.е. символ будет перекрывать то, что отображает ГЗУ, какой в этом смысл ?
    Или я что-то не так понял ?

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Junior
    Регистрация
    08.06.2015
    Адрес
    г. Санкт-Петербург
    Сообщений
    9
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Привет.
    1. да
    2. Маска логического цвета определяется битами, соответствующими одной точке на экране в каждом из слоев ГЗУ (R, G, B) и АЦЗУ (I), физический цвет отображения берется из т. н. просмотровой таблицы (LUT). Допустим, в верхней левой точке экрана в каждом слое ГЗУ (со смещением N*0x4000+0, бит 7) установлены единицы, а в АЦЗУ по адресу 0 записан тоже 0, в этом случае логический цвет этой точки - 0x7. Если в АЦЗУ по адресу 0 записан символ, содержащий включенный бит в верхнем левом углу (или инвертированный символ, его не содержащий), то логический цвет точки (0,0) станет 0xF. Таблица LUT определяет соответствие логического цвета физическому (R, G, B, I). Для побитного (попиксельного) рисования доступны всего 7 логических цветов, т.к. в четвертом слое можно рисовать только средствами АЦЗУ (например, псевдографикой в основном знакогенераторе 0x80..0xBF).
    Смысл в том, что фактически у "Корвета" 16-цветная графика, однако один из слоев отдан аппаратному АЦЗУ и формирует очень быструю текстовую информацию и недоступен для побитного рисования. Символ в АЦЗУ не "перекрывает" ГЗУ: если настроить LUT так, чтобы логический цвет соответствовал физическому, символы АЦЗУ будут "просвечивать" и делать пиксели под символами ярче, если в двух словах)

  4. #3
    Junior
    Регистрация
    12.05.2018
    Адрес
    с. Телешовка, Киевская обл., Украина
    Сообщений
    11
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Express Pascal 2.0

    Всем доброго времени суток!
    Возник вопрос по Паскалю. Есть процедура перемещения курсора
    Код:
    GotoXY(X,Y)
    . Существует ли процедура управления отображением курсора?
    Например, в Бейсик Корвет 2.0 есть команда
    Код:
    LOCATE X,Y,C
    , где X - координата по горизонтали, Y - по вертикали, C - отображение курсора (0 - нет, 1 - да).
    Частично вопрос для себя решил (в одном примере видел), можно вываливать в консоль управляющие коды или ESC-коды, но как-то оно "не комильфо"..

    Скрытый текст

    Код:
    УПРАВЛЯЮЩИЕ			ДЕЙСТВИЕ
     СИМВОЛЫ:
    
    
    01H,X,Y =>	Перемещение курсора в позицию с номером строки
    		(x-20h) и номером столбца (y-20h)
    04H =>		Стирание  символов от позиции курсора до конца
                    экрана
    07H =>		Выдача звукового сигнала
    08H =>		Возврат курсора на одну позицию назад
    0АH =>		Перемещение  курсора в начало следующей строки
                    (с роллингом)
    0BH =>		Удаление  строки,  на которой находится курсор
                    (оставшиеся до конца экрана строки  сдвигаются
                    вниз, последняя строка пропадает)
    0CH =>		Перемещение  курсора  в  первую позицию первой
                    строки экрана
    0DH =>		Перемещение  курсора  в первую позицию текущей
                    строки
    10H,X =>	Символ  x  выводится  на  экран и не считается
                    управляющим символом
    15H =>		Стирание символов от позиции  курсора до конца
    		строки
    18H =>		Перемещение курсора вправо
    19H =>		Перемещение курсора вверх
    1AH =>		Перемещение курсора вниз
    1CH =>		Вставка  пробела  на  место  курсора  (остаток
                    строки  сдвигается  вправо,  последний  символ
                    строки пропадает)
    1DH =>		Удаление  символа  из позиции курсора (остаток
                    строки сдвигается влево, в  последнюю  позицию
                    строки заносится пробел)
    1EH =>		Вставка   пустой   строки   на  место  курсора
                    (оставшиеся до конца экрана строки  сдвигаются
                    вверх,  на  место  последней  строки заносится
                    пустая строка)
    1FH =>		Очистка всего экрана
    
    УПРАВЛЯЮЩИЕ			ДЕЙСТВИЕ
    ПОСЛЕДОВА-
    ТЕЛЬНОСТИ:
    
    1BH,'0' =>	Включение     основного     набора    символов
                    знакогенератора 
    1BH,'1' =>	Включение   дополнительного   набора  символов
                    знакогенератора
    1BH,'2' =>	Включение нормальной ширины символов
    1BH,'3' =>	Включение удвоенной ширины символов
    1BH,'6' =>	Включение    режима   инверсного   отображения
                    символов
    1BH,'7' =>	Выключение   режима
                    инверсного  отображения  символов
    1BH,':' =>	Разрешение   отображения  курсора
    1BH,';' =>	Запрет   отображения   курсора
    1BH,'<' =>	Включение  режима  автоматического  перехода к
                    новой  строке  экрана  по   достижению   конца
                    текущей строки
    1BH,'=' =>	Выключение  режима  автоматического перехода к
                    новой  строке  экрана  по   достижению   конца
                    текущей   строки   (переход   к  новой  строке
                    выполняется только по управляющим символам)
    1BH,'@' =>	Вставка  пробела  на  место  курсора  (остаток
                    строки  сдвигается  вправо,  последний  символ
                    строки пропадает)
    1BH,'A' =>	Перемещение курсора вверх
    1BH,'B' =>	Перемещение курсора вниз
    1BH,'C' =>	Перемещение курсора вправо
    1BH,'D' =>	Перемещение курсора влево
    1BH,'E' =>	Очистка всего экрана
    1BH,'F' =>	Перемещение курсора в начало следующей строки,
                    а из последней строки экрана в первую
    1BH,'G' =>	Перемещение курсора в начало текущей строки
    1BH,'H' =>	Перемещение  курсора  в  первую позицию первой
                    строки экрана
    1BH,'J' =>	Стирание  символов от позиции курсора до конца
                    экрана
    1BH,'K' =>	Стирание  символов от позиции курсора до конца
                    строки
    1BH,'L' =>	Вставка   пустой   строки   на  место  курсора
                    (оставшиеся до конца экрана строки  сдвигаются
                    вниз, последняя строка пропадает)
    1BH,'M' =>	Удаление  строки,  на которой находится курсор
                    (оставшиеся до конца экрана строки  сдвигаются
                    вверх,   на   место  последней  строки  экрана
                    заносится пустая строка)
    1BH,'P' =>	Удаление  символа  из позиции курсора (остаток
                    строки сдвигается влево, в  последнюю  позицию
                    строки заносится пробел)
    1BH,'Y',X,Y =>	Перемещение курсора в позицию с номером строки
                    (x-20h) и номером столбца (y-20h)
    [свернуть]

  5. #4
    Member
    Регистрация
    21.02.2011
    Адрес
    Воронеж
    Сообщений
    122
    Спасибо Благодарностей отдано 
    52
    Спасибо Благодарностей получено 
    39
    Поблагодарили
    13 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В процессе опытов с программированием таблицы LUT наткнулся на следующий нюанс.
    Во всех источниках, которые описывают устройство графического контроллера Корвета, которые я нашёл, говорится только, что LUT - это таблица соответствия логического и физического цветов.
    Младший полубайт - логический цвет, старший полубайт - физический.
    Т.е. если туда записать байт 11h, то логическому цвету с номером 1 будет соответствовать цвет из плоскости B, т.е. синий.

    Всё бы ничего, но, как оказалось, это правило работает только для логических цветов с номером больше 0.
    По этому правилу байт 10h должен бы превратить цвет с номером 0 в синий, т.е. вместо чёрного, фон должен стать синим, но этого не происходит.
    Вернее происходит, но только в эмуляторах
    На реале чёрный остаётся чёрным, а вот вместо, на пример, белого, появляется какой-то то ли желтоватый, то ли жёлто-зелёный.

    Оказалось, что ячейка таблицы с номером 0 имеет особенное значение. Она содержит цвета, которые ВЫЧИТАЮТСЯ из всех остальных цветов при формировании изображения.
    Т.е. если туда положить значение 80h, то вся палитра сразу потеряет яркостную составляющую. А если туда положить значение F0h, то перестанут отображаться вообще все цвета.
    Видимо, этот трюк сделали, чтобы реализовать возможность мгновенного гашения всего изображения путём переброски всего одного байта.

    Для тестов использовалась следующая программа на Express Pascal:

    program test;
    var i : integer;
    begin
    clrgscr;
    for i := 0 to 7 do begin
    setcolor(i);
    rectangle(64*i,0,64*(i+1),200,true);
    end;
    repeat until keypressed;
    mem[$fafb] := $10;
    end.

    Если её запустить в эмуляторах (проверял в b2m, SovietPC, эмулятор Ерохина), то чёрный фон превращается в синий, на реале поведение совсем другое.
    Если вместо $10 поставить $F0, то на реале всё изображение гаснет.

  6. #5
    Master
    Регистрация
    30.05.2017
    Адрес
    г. Алматы, Казахстан
    Сообщений
    902
    Спасибо Благодарностей отдано 
    62
    Спасибо Благодарностей получено 
    255
    Поблагодарили
    145 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

  7. #6
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,846
    Спасибо Благодарностей отдано 
    83
    Спасибо Благодарностей получено 
    227
    Поблагодарили
    166 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Willy Посмотреть сообщение
    Оказалось, что ячейка таблицы с номером 0 имеет особенное значение. Она содержит цвета, которые ВЫЧИТАЮТСЯ из всех остальных цветов при формировании изображения.
    Есть такое понятие, как "уровень чёрного". Я думаю, цвет бордюра был принят телевизором/монитором как этот самый уровень, отсюда и понижение яркости всех цветов.

  8. #7
    Member
    Регистрация
    21.02.2011
    Адрес
    Воронеж
    Сообщений
    122
    Спасибо Благодарностей отдано 
    52
    Спасибо Благодарностей получено 
    39
    Поблагодарили
    13 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Есть такое понятие, как "уровень чёрного". Я думаю, цвет бордюра был принят телевизором/монитором как этот самый уровень, отсюда и понижение яркости всех цветов.
    Похоже, вы правы.
    Потому что
    Цитата Сообщение от Sancho45 Посмотреть сообщение
    Это фото с реального Корвета
    - у меня картинка другая.

    Я к монитору подключаюсь через GBS/VGA, может быть из-за этого такая реакция на привязку к чёрному.
    Надо будет попробовать к SCART подключиться, может быть что-то поменяется.

    Но вот остаётся вопрос, стоит ли использовать нулевую ячейку в собственных целях. Неизвестно, какое подключение будет использоваться у Корвета, на котором будет запущен этот софт.

  9. #8
    Master
    Регистрация
    30.05.2017
    Адрес
    г. Алматы, Казахстан
    Сообщений
    902
    Спасибо Благодарностей отдано 
    62
    Спасибо Благодарностей получено 
    255
    Поблагодарили
    145 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  10. Этот пользователь поблагодарил Sancho45 за это полезное сообщение:

    Willy (08.12.2021)

  11. #9
    Member
    Регистрация
    21.02.2011
    Адрес
    Воронеж
    Сообщений
    122
    Спасибо Благодарностей отдано 
    52
    Спасибо Благодарностей получено 
    39
    Поблагодарили
    13 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sancho45 Посмотреть сообщение
    Я когда портировал диззи на корвет тоже менял лут под спековский, но от идеи микса с яркостным сигналом пришлось отказаться, много заморочек.
    Можно глянуть на результат или работа ещё не завершена ?

    Я тут тоже в процессе доделки одной игры.
    Завязался на дефолтный фон в нулевой ячейке, а тут вон какая засада.

    Вот пример теста, здесь решал в какой гамме делать, в итоге сделал без яркостного.
    Ну и вообще говоря не обязательно же на всю палитру делать одинаковую яркость. Можно какие-то цвета яркими оставить, а какие-то приглушить.
    Другой вопрос, если нужен тот же красный и яркий и не яркий, но опять же, можно использовать текстовый слой. Хотя тут очень сильно всё зависит от организации хранения графики и подхода к использованию цветов.
    Последний раз редактировалось Willy; 08.12.2021 в 12:08.

  12. #10
    Master
    Регистрация
    30.05.2017
    Адрес
    г. Алматы, Казахстан
    Сообщений
    902
    Спасибо Благодарностей отдано 
    62
    Спасибо Благодарностей получено 
    255
    Поблагодарили
    145 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Проект под z80, но т.к. никто не собрал, я забросил проект. Там осталось толькотперемещение диззи сделать, код на область видео озу накладывается, надо переместить, но .... энтузиазма нет))

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 31
    Последнее: 10.09.2022, 14:22
  2. Wiki по программированию
    от moroz1999 в разделе Разный софт
    Ответов: 23
    Последнее: 16.12.2010, 16:31
  3. Наиболее полная дока по программированию GS
    от Evgeny Muchkin в разделе Программирование
    Ответов: 1
    Последнее: 28.03.2007, 14:41
  4. Общедоступная wiki по программированию на Спектруме
    от valker в разделе Программирование
    Ответов: 11
    Последнее: 01.03.2007, 09:23

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •