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

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 29

Тема: Печать текста.

  1. #1
    Master Аватар для boo_boo
    Регистрация
    10.05.2005
    Адрес
    Москва
    Сообщений
    715
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от mig'95
    Пожалуйста, подскажите, каким образом можно организовать печать текста на экране не по RST 16. Приводить здесь код не обязательно, достаточно лишь общее описание алгоритма.. Сам я что-то в затруднении..
    по координатам x,y вычислить адрес верхнего байта знакоместа, (*) взять код символа, по коду символа и адресу фонта найти адрес первого из 8и байт графики символа. взять байт символа, положить в экранный адрес, перейти к следующему байту символа и адресу в экране на пиксел ниже, и так 8 раз. перейти к экранному адресу для следущего символа, повторять все это, начиная с (*), до тех пор, пока строка не закончится.

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

  3. #2
    Activist Аватар для fk0
    Регистрация
    18.02.2005
    Адрес
    St. Petersburg
    Сообщений
    415
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Построчно будет быстрей. Т.е. вначале верхняя строка всей строки, потом вторая и т.п.

  4. #3
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,566
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    395
    Спасибо Благодарностей получено 
    1,204
    Поблагодарили
    392 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от mig'95
    Например, если я использую стандартный шрифт, размещающийся с адреса 15616 (тоже, кстати, непонятно - ведь для запуска TR-DOS мы обращаемся из Бейсика по этому адресу, а там - шрифт) и мне нужно вывести на печать символ, например "H" (код 72) .
    Каждый символ в ПЗУ занимает 8 байт. Шрифт начинается с символа пробела. Его код - 32. Значит реальное начало шрифта, то есть символа с кодом 0, находится по адресу 15616-32*8. Чтобы получить адрес буквы "Н" в шрифте очевидно нужно сделать так: (15616-32*8)+(72*8). Следующие за этим адресом 8 байт и будут составляющие символа Н.

    Что же касается TR-DOS, то контроллер Beta Disk устроен так, что при попытке перехода на определённую область адресов ПЗУ, в которую как раз и входит упомянутый адрес 15616, включается ПЗУ TR-DOS, которое заменяет собой стандартное ПЗУ с Бейсиком. А в ПЗУ TR-DOS по этим адресам находтся уже не шрифт, а код программы работы с дисководом.
    С уважением, Станислав.

  5. #4
    Guru
    Регистрация
    15.01.2005
    Адрес
    USSR
    Сообщений
    2,038
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Общий принцип такой:
    Физический адрес видеопамяти:
    Адрес=16384+2048*I+32*J+256*K+X,
    где:
    I=0...2 - номер трети экрана (сверху вниз);
    J=0...7 - номер строки символов в трети (сверху вниз);
    K=0...7 - номе линии (байта) в символе (сверху вниз);
    X=0...31 - номер знакоместа в строке (слева направо).

  6. #5
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,277
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Построчно будет быстрей. Т.е. вначале верхняя строка всей строки, потом вторая и т.п.
    интересно, это как? кто нить подскажет как такое могет быть?
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  7. #6
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Когда работаешь со стандартным набором - 8 бит в ширину и точность вывода 1 знакоместа разницу заметить трудно. Когда же делаешь точность печатания до пиксела + нестандартная длина, действительно удобнее..
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  8. #7
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,277
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    я поясню, когда надо вывести чисто текст, длина которого от одной строки к другой меняется, да ещё эскейп последовательности, то почему то мне в голову приходит что вариант вывода построчно отпадает. т.е. если вести речи о драйвере, то вапще отпадает...
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  9. #8
    Master Аватар для Splinter
    Регистрация
    04.07.2005
    Адрес
    Нижний Тагил
    Сообщений
    842
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вобще то все проста как мандарин. если нет заморочек со шрифтом 42 в строке (тут придется юзать сдвиги), то,

    1) считать код символа
    2) найти его в таблице знакогенератора
    3) перебросить в последнее свободное знакоместо
    4) если не конец строки, то исх адрес +1
    4a) если конец строки, то DOWN HL и HL-32
    4b) если конец экрана, то scroll

    грубо, но в целом так....

    Добавлено через 2 минуты
    чуть не забыл, HL подразумеваю адрес назначения доставки символа из знакогенератора
    Последний раз редактировалось Splinter; 02.12.2008 в 21:15. Причина: Добавлено сообщение

  10. #9
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,277
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    перебросить в последнее свободное знакоместо
    это немного не то...это не строчный вывод символов, а обычный посимовльный.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  11. #10
    Master
    Регистрация
    17.05.2005
    Адрес
    г. Абакан
    Сообщений
    694
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Wink

    Цитата Сообщение от Sayman Посмотреть сообщение
    я поясню, когда надо вывести чисто текст, длина которого от одной строки к другой меняется, да ещё эскейп последовательности, то почему то мне в голову приходит что вариант вывода построчно отпадает. т.е. если вести речи о драйвере, то вапще отпадает...
    Легко + более рационально.
    Сначала "печатаем" в линейный буфер, по коду CR перекидываем буфер на экран.
    общий алгоритм такой:
    есть переменные х,у,с (где с-цвет)
    есть внутренняя переменная ф (флаг текущей операции)
    есть процедура типа рст№10
    есть буфер на 256 байт (8х32)

    изначально переменные = 0
    на вход процедуры последовательно начинаем пихать коды символов и управляющие, где, например: 13 - вывести буфер на экран, 14 - установить цвет (после этого кода идет код цвета), 15 - установить координаты (следом два байта координат).
    Код:
    Процедура Печать(код)
    Если ф = 0 Тогда
      Если код = 13 Тогда
        ВывестиБуферНаЭкран()
      ИначеЕсли код = 14 Тогда
        ф = 1
      ИначеЕсли код = 15 Тогда
        ф = 2
      Иначе
        ПереписатьОбразСимволаВБуфер(код)
      КонецЕсли
    ИначеЕсли ф = 1 Тогда
      с = код
      ф = 0
    ИначеЕсли ф = 2 Тогда
      х = код
      ф = 3
    ИначеЕсли ф = 3 Тогда
      у = код
      ф = 0
    Иначе
      АбнормалПрограммТерминатион() // :-D
    КонецЕсли
    Возврат
    КонецПроцедуры
    надеюсь понятно выразил свои мысли

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

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

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

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

Похожие темы

  1. Цветная печать на Speccy
    от Splinter в разделе Несортированное железо
    Ответов: 11
    Последнее: 16.07.2005, 10:13
  2. Этюды: печать шрифтом 5x5...
    от breeze в разделе Программирование
    Ответов: 12
    Последнее: 27.03.2005, 05:21

Ваши права

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