User Tag List

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

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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

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

    По умолчанию

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

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

  3. #2

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,424
    Спасибо Благодарностей отдано 
    768
    Спасибо Благодарностей получено 
    2,374
    Поблагодарили
    1,322 сообщений
    Mentioned
    39 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)

  4. #3

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

    По умолчанию

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

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

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

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

  5. #4

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,424
    Спасибо Благодарностей отдано 
    768
    Спасибо Благодарностей получено 
    2,374
    Поблагодарили
    1,322 сообщений
    Mentioned
    39 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

  6. #5

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

    По умолчанию

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

  7. #6

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,424
    Спасибо Благодарностей отдано 
    768
    Спасибо Благодарностей получено 
    2,374
    Поблагодарили
    1,322 сообщений
    Mentioned
    39 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 байт.

  8. #7

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

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Число процедур зависит от числа букв, не от размера текста,
    Значит, я не до конца понял идею. Я твой пример интерпретировал как кодирование каждой буквы текста (не фонта!) отдельной процедурой. У меня не тут уровень, конечно - я всё делаю по-деревянному, чисто в лоб.
    С уважением, Станислав.

  9. #8

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

    По умолчанию

    Я вижу, что вы понимаете друг друга с полуслова, но прошу всё-таки пояснить и разжевать для тупых суть этого волшебного метода. Я даже подключил ИИ к вашему диалогу, но и он трактует то, о чём вы тут пишете, как последовательность процедур печати каждого символа без всяких таблиц на 256 байт. Что за таблица, какова её структура? Как можно переходить на таблицу по "JMP TABFONT "? Можно чуть полнее код увидеть?
    С уважением, Станислав.

  10. #9

    Регистрация
    05.04.2013
    Адрес
    Починки, Нижегородская обл.
    Сообщений
    1,397
    Спасибо Благодарностей отдано 
    417
    Спасибо Благодарностей получено 
    668
    Поблагодарили
    262 сообщений
    Mentioned
    29 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Что за таблица, какова её структура? Как можно переходить на таблицу по "JMP TABFONT "?
    Если я все правильно понял, в таблице команды JMP на адреса фрагментов кода для вывода различных символов, выравненные по границе 4 байт. Старший бит адреса таблицы фиксированный, младший выбирается записью в операнд команды JMP (STA $+20) кода символа, умноженного на 4. Во втором варианте отдельной таблицы нет, строки кодируются просто последовательностью адресов фрагментов кода, рисующих символы, в обратном порядке.

  11. #10

    Регистрация
    15.04.2011
    Адрес
    г. Новосибирск
    Сообщений
    769
    Спасибо Благодарностей отдано 
    67
    Спасибо Благодарностей получено 
    372
    Поблагодарили
    60 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Я вижу, что вы понимаете друг друга с полуслова, но прошу всё-таки пояснить и разжевать для тупых суть этого волшебного метода. Я даже подключил ИИ к вашему диалогу, но и он трактует то, о чём вы тут пишете, как последовательность процедур печати каждого символа без всяких таблиц на 256 байт. Что за таблица, какова её структура? Как можно переходить на таблицу по "JMP TABFONT "? Можно чуть полнее код увидеть?
    Как уже написали достаточно младший байт в адресе перехода поправить, это стандартная штука для lut таблиц, они как правило выравниваются на 256 байт в паяти.TABFONT выглядит как список джампов, примерно так:

    jp drawLetter0 : nop : jp drawLetter1 ; nop и.т.д

    Я вот немного не понял зачем выравнивать по 4 байта, jmp+адрес вроде 3 занимают Можно договорится что код символа умноженные на три юзаем и тогда 85.33333 влезет тайла ) на спектруме ещё jr можно заюзать для служебных...

    Но мне кажется твой вариант "в лоб" выглядит вполне ок, я бы не упарывался ради текста )
    Последний раз редактировалось DenisGrachev; 20.09.2025 в 06:44.

Страница 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

Ваши права

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