User Tag List

Страница 9 из 10 ПерваяПервая ... 5678910 ПоследняяПоследняя
Показано с 81 по 90 из 100

Тема: Специалист: графика

  1. #81

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,213
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,644
    Поблагодарили
    572 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну и коли уж про скроллинг заговорили, может подскажете, как его организовать грамотно если уж не совсем без тиринга, то хотя бы с минимально заметным?

    Нужно плавно попиксельно двигать окно высотой 112 пикселей и шириной 40 байт.

    Я сходу сделал сдвиг столбцов через стек с развёрнутым циклом. Но получилось, мягко говоря, не очень (на реале и под эмулятором выглядит всё-таки получше, чем после захвата):



    Потом я просто в лоб без всяких стеков и выкрутасов решил двигать построчно. Построчно, имеется виду, строка текста высотой 8 пикселей. Стало, конечно, медленнее и всё равно плохо, но, как по мне, для глаза всё же поприятнее.



    Там почти весь текст (но не весь!) идёт через пустую строку высотой 8 пикселей. Думаю как-то этот факт учитывать и не трогать пустые строки. Но пока эту головоломку отложил в строну, так как хужо-бедно работает. Но, так оставлять, конечно, нельзя.
    С уважением, Станислав.

  2. #82

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    290
    Поблагодарили
    216 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Там почти весь текст (но не весь!) идёт через пустую строку высотой 8 пикселей. Думаю как-то этот факт учитывать и не трогать пустые строки.
    Я предлагал в соседней теме делать вывод текста через push. Если нижняя строка шрифта пустая, то можно печатать текст поверх, смещая его на 1 пиксель вверх.

    - - - Добавлено - - -

    К примеру, вот так выглядит "код" буквы:
    Код:
    SPHL ; в HL адрес экрана, прямо под буквой
    INR H
    INX B
    LDAX B   ; в BC адрес "текстовой строки", загружаем следующий символ
    STA $+20
    LXI D,0
    PUSH D
    ...
    LXI D,0
    PUSH D
    JMP TABFONT
    Нужно заранее сдвинуть коды букв на два бита влево, чтобы получалось смещение в таблице TABFONT (её конечно выровнять на границу 256 байт). Символ с кодом 00 - конец строки, выход из п/п печати.

  3. #83

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для подобной задачи считаю более подходящим вариант с построчным выводом, как уже писал. Не обязательно по одной строке, можно по 2х байтным вертикальным блокам
    024...
    135...
    или
    135...
    024...

    Преимущество скорости постолбцового вывода меркнет перед многочисленными разрывами.

    - - - Добавлено - - -

    Вполне возможно подойдет компромиссный вариант - выводить символ естественным образом (по столбацам, можно через стек), а потом смещаться вправо и выводить следующий символ и так всю строку.
    Что касается пустых строк да и всех пробелов, то их конечно не нужно выводить, если у каждого ненулевого (с точками) символа нижняя строка или две (смотря какой шаг сдвига) нулевые.

  4. #84

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,213
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,644
    Поблагодарили
    572 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Вполне возможно подойдет компромиссный вариант - выводить символ естественным образом (по столбацам, можно через стек), а потом смещаться вправо и выводить следующий символ и так всю строку.
    Во втором видео я как раз так и делал. Правда, без оптимизации, просто посмотреть как это будет выглядеть.
    С уважением, Станислав.

  5. #85

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Примерно посчитал вариант b2mа, если не ошибся получилось 139 тактов/символ, весьма шустро. 29 байт/символ (+таблица 256 байт), символов максимально 64 и минимум 2 из них служебные (перевод строки и конец текста).
    Прикинул вариант с 256 символами (16 байт/символ + дополнительно надо посчитать), но с полезной матрицей 8x6 + 2 строки пустые, у меня получилось в районе 200 тактов/символ.

  6. #86

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    139 тактов/символ
    Можно быстрее.
    1. Учесть, что часть байтов повторяются, тогда часть lxi меняем на mvi или убираем.

    2. Совсем другой вариант на базе идей Дениса Грачева. Адрес текста в SP, но не коды букв, а адреса процедур. Базовый вариант:
    Код:
    ;SP - адрес текста
    ;HL - экранный адрес
    ;A - младшая половина экранного адреса
    	inr h
    	mov l,a
    	mvi m,data0\ inr l	;7 повторов
    	...
    	mvi m,data7
    	ret
    2.1. Свободны 4 регистра в которые можно поместить 4 наиболее используемых в символах байта (один явно будет 0). Меняем соответствующие mvi m,data на mov m,r.
    2.2. При сдвиге на 1 строку можно выводить нулевые байты только если они идут после ненулевых. Плюс досрочное окончание процедуры если внизу остались только нули. Тогда вывод пробела сокращается до
    Код:
    	inr h\ mov l,a\ ret

    Эти 2 пользователя(ей) поблагодарили ivagor за это полезное сообщение:

    b2m(19.09.2025), Pyk(20.09.2025)

  7. #87

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,213
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,644
    Поблагодарили
    572 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Правильно ли я понимаю вашу мысль, что вы предлагаете не сдвигать экран, а просто перепечатывать его поверх особым образом, сдвинув на один пиксель вверх? Неужели это может быть быстрее, чем сдвигать блок 8*8 вверх на пиксель?

    И сразу оговорюсь, что в используемом шрифте нижняя строка не всегда пустая. Я точно помню, что как минимум "y" занимает низ. У меня из-за неё скорллинг "мазал" (оставлял след) в одном из моих экспериментов.

    А что при таком варианте делать с верхней и нижней с текстовыми строками?

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

  8. #88

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    перепечатывать его поверх особым образом, сдвинув на один пиксель вверх? Неужели это может быть быстрее, чем сдвигать блок 8*8 вверх на пиксель?
    Попробуй сочинить сравнимую по скорости процедуру сдвига, вряд ли это возможно.
    Цитата Сообщение от CityAceE Посмотреть сообщение
    И сразу оговорюсь, что в используемом шрифте нижняя строка не всегда пустая. Я точно помню, что как минимум "y" занимает низ. У меня из-за неё скорллинг "мазал" (оставлял след) в одном из моих экспериментов.
    Второй вариант хорошо подходит, добавляется девятая нулевая строка только для букв у которых восьмая не пустая.
    Цитата Сообщение от CityAceE Посмотреть сообщение
    А что при таком варианте делать с верхней и нижней с текстовыми строками?

    Вообще в оригинале, который я пытаюсь скопировать 1:1, текст попиксельно появляется снизу, и также попиксельно исчезает сверху. Я пока для упрощения нижнюю строку просто печатаю целиком, но тоже в дальнейшем обязательно планировал привести к должному виду.
    1. Отдельные "классические" процедуры для верхней и нижней строки.
    2. Или вывести верхнюю строку быстрой процедурой и сразу стереть лишнее, аналогично для нижней.

    - - - Добавлено - - -

    Цитата Сообщение от ivagor Посмотреть сообщение
    inr h\ mov l,a\ ret
    Ступил, в букве с ненулевыми строками будет в начале mov l,a поэтому в пробеле это не нужно и остается только inr h\ ret

  9. #89

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,213
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,644
    Поблагодарили
    572 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Запутался.
    - Вариант b2m не подходит по причине того, что нужно принудительно стирать линию ниже. Ну либо же потом отдельной рутиной стирать её. А если делать шрифт высотой 10 пикселей, чтобы две нижних строки были гарантированно пустыми?
    - Варинат ivagor выглядит привлекательным, но там текста почти на 4 кило, а при этом в памяти ещё нужно место под музыку и 7 картинок. Таким образом, чтобы закодировать 4 кб текста процедурами просто не хватит памяти.
    Либо я не понимаю того, что вы предлагаете.
    С уважением, Станислав.

  10. #90

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    А если делать шрифт высотой 10 пикселей, чтобы две нижних строки были гарантированно пустыми?
    Почему нет? В каждой процедуре добавится 4 байта lxi d,0 + push d.
    Цитата Сообщение от CityAceE Посмотреть сообщение
    текста почти на 4 кило, а при этом в памяти ещё нужно место под музыку и 7 картинок. Таким образом, чтобы закодировать 4 кб текста процедурами просто не хватит памяти
    Т.е. место для 4 кб есть, а для 8 кб нет? Тогда вариант b2m.
    Но меня смутило про "закодировать 4 кб текста процедурами". Число процедур зависит от числа букв, не от размера текста, у b2m 64 процедуры максимум по 30 байт (если 10 строк) + таблица переходов 256 байт.

Страница 9 из 10 ПерваяПервая ... 5678910 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Испанская графика
    от Rindex в разделе Графика
    Ответов: 2
    Последнее: 05.02.2015, 16:44
  2. Графика Cyclone и T.L.L.
    от Destr в разделе Графика
    Ответов: 7
    Последнее: 12.07.2011, 12:38
  3. Графика из Adventurer 1-7
    от moroz1999 в разделе Графика
    Ответов: 1
    Последнее: 21.01.2011, 05:19

Ваши права

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