Да. В общем идея сделать режим 512 более дружелюбным для всяких проб пера и написания тестов.
Вид для печати
Да. В общем идея сделать режим 512 более дружелюбным для всяких проб пера и написания тестов.
Пришлось повозиться и немного все упорядочить, но теперь 79 - дошли до 'o'.
Есть\\\был довольно толстый скрытый резерв -- первый и последний pop используются только наполовину.
Upd: 79
Ультимативное демомейкерство, почти в 5 раз быстрее самых шустрых досов.
Сдвиги 0-5 не отличаются ничем, кроме mvi h. 6-7 аналогично. С этим практически ничего нельзя поделать, но напрягает.
- - - Добавлено - - -
Пожалуй, всё. Можно убрать хлам и поформатировать, но суть все сказано: 81 обсценно-демосценный символ за прерывание.
- - - Добавлено - - -
P.S. Впредь буду печатать буквы только очень медленно, вызывая setpixel для каждой точки.
Круто, можно печатать 50 строк в секунду. Еще бы blitы добавить для полного счастья. Если ты не соберешься, может я потом когда-нибудь созрею.
Тут полная демосцена -- иллюзия печати строки, но на самом деле мы печатаем номера столбцов. Мне кажется, что практического применения этому примеру нет, это просто памятник абсурдной оптимизации в ущерб здравому смыслу. Но все же 81, да и как кладезь всяких диких трюков это забавно.
Целесообразность добавления blit-ов именно в этой версии для меня лично тут невысокая. Сам я если чего-то и буду еще здесь делать, так это медленные столбцы, например. А в этом варианте последняя осмысленная версия по-моему была твоя, где код символа был столбцом в битмапе шрифта. Если делать пример-заготовку, я бы взял ее, причем только с nblit-ами, чтобы был минимум барахла. По-моему в рыбе важно, чтобы было минимум лишнего. А то у меня часто руки опускаются от одного вида избыточной универсальности.
Если отвлеченно фантазировать, то быстрая печать символов пригодилась бы для специальной версии доса. Актуальность такой штуки маленькая, но думаю никто не был бы против, если бы она была.
Моя отправная точка была -- как медленно отрисовыватся рогалик, вдруг можно сделать его хотя бы чуточку пошустрей. К STALK1.SAV это тоже относится. Но это так, очень отвлеченно. Делать какие-то движения в эту сторону я пока не созрел. Но этим программам в принципе ничего кроме эмуляции терминала не нужно, поэтому версия с nblit к ним теоретически приклеивается. Насколько можно ускорить тот же РДС, тут я не знаю. Подозреваю, что он тоже не пальцем деланый и места свободного под всякие модные оптимизации в нем так просто не найдешь.
Если без увеличения места под процедуры, то у меня так получалось. Интересно, как там еще можно ускорить (без увеличения размера).
Хорошо, но что там было оптимизировано сложно будет понять и перенести в новую версию без исходников, было/стало. :(
В исходниках РДС 3, файле VIRT, как я понимаю, сосредоточены все функции отрисовки символов, которые вызываются из DISP. Можете их обновить в соответствии с улучшениями, сделанными в РДС 2.04 / 2.05? И запас по байтам там есть небольшой, VIRT можно увеличить на 36 байт, если что... А я уж сделаю всё остальное и соберу новый вариант. :)
1. Методику инсталляции РДС помню примерно так: нужен диск в дисководе с COMMAND.SYS РДСа. А файл РДСа (старого или нового) можно загрузить через внешнее пзу. При старте форматируем кваз (LCtrl в эмуляторах) и все должно заработать. Альтернативный вариант - взять где-нибудь готовый образ кваза для РДС. Tim0xA делал такой, вроде в комплекте VV это он. Или в комплекте Kings Bounty. Не исключено, что есть более простой подход. HDDшный РДС скорее всего может взять COMMAND.SYS с HDD.
2. Исходники патча вывода символов РДС (надеюсь) на другом компе, выложу в воскресенье, если этот вопрос останется актуальным.
Вообще-то не нужен -- при запуске РДС с форматированием КД (с нажатым УС) он там будет создан автоматически, как и OS.COM. Для инсталляции РДС вообще ничего не нужно, кроме самого РДС, в "большом" файле rdsXXX.rom. :)
Спасибо, посмотрим, что там...
Да, я забыл/напутал. БезHDDшным РДСам достаточно любого диска (без COMMAND.SYS), чтобы дойти до командной строки. А HDDшным (при наличии HDD или образа HDD) и дискета не нужна.
У меня получилось отформатировать диск и РДС запустилась. Почему-то клавиатура в DX-Forth не работает.
- - - Добавлено - - -
Набросал на скорую руку совершенно бесхитростный вывод столбцами.
13 печальных символов за прерывание.
Для рыбы многовато развернутых циклов, но вообще компактно и все-таки это хелло вролд с минимальной эмуляцией терминала.
Или так
Гениально! 16.
- - - Добавлено - - -
Чего-то не то форум глюканул, не то ты удалил vert2..
Эх, я думал успел удалить и шито-крыто. Поторопился с vert2, там получился nblit вместо blit. А если переделать в blit, он медленнее vert.
Немного безумия. Можно сэкономить на проверках. Ультимативный вариант - берем весь байт (столбец) и диспетчер вызывает одну из 256 процедур (они ничего не проверяют, только рисуют свой уникальный столбец). Могу предположить, что это не найдет понимания, поэтому компромиссный вариант - полубайт и 16 процедур, но тут уже надо считать, будет ли выигрыш.
Не, ну смотря для чего. Если для спорта, то да. А если для эмуляции терминала и хелло вродла, то надо чистенько и компактно по-моему.
Для подавляющего большинства шрифтов (кроме каких-нибудь инверсных) характерно заполнение чернилами <50%, поэтому выгоднее изменить операции. И еще там мелкие оптимизации по размеру.
Нашел какой-то слонопотамский фонт 6х8, выглядит неплохо. Правда почему-то налезает псевдографика сверху, никак не могу понять что не так. Если увеличить интервал между строками, видно, что сам фонт в порядке.
Версия на основе ivagor-ского вертикала с blit-ами v 3.
Со слонопотамским фонтом стало заметно (заворот нижней строки наверх), что в colorset не хватает mvi a,255\ out 3
Стало хорошо. Вот только что это за чудо-юдо кодировка я никак не могу понять. Буковки в ней вроде как cp1251, но там есть еще псевдографика. И вот чему она соответствует я не пойму. Фонт откуда-то с форума электронщиков с LCD индикаторами, им наверное все равно.
С кодировкой надеюсь получится разобраться (или найти другой шрифт, может BOLD BIOS PPC глянуть?), а тем временем еще порция бодрости для процедуры
1. Маска по таблице
2. Быстрая очистка пустых столбцов, можно включить/отключить по #DEFINE ZeroColumn
И вероятно финальная (для меня) столбцовая версия. Оптимизированы переходы по плоскостям и между плоскостями. Каждый второй байт фонта зеркалится в другую сторону, это для наглядности, а так надо просто один раз зеркальнуть и потом пользоваться преобразованным фонтом. Получается приблизительно в 2 раза медленнее умеренного строчного варианта, зато фонт полтора килобайта, а не 4.
Что еще можно сделать - отдельно хакнуть вывод пробела. Хака может быть условной - один раз проверяем, что символ 32 пустой и настраиваем хаку.
И насчет варианта с 256 процедурами. Посчитал, что каждая из них влезет в 32 байта, т.е. 1.5 Кб знакогенератор+8 Кб развернутых процедур.
Для спорта это все конечно чудесно, особенно 256 процедур мне нравится. Эдак ты скоро обгонишь 80 символов за прерывание.
Но для рыбов я думаю даже ZeroColumn уже слишком, потому что начинает смотреться слишком спортивно. Элегантность столбцового метода теряется. Кроме того, такой код отпугивает казуальщика, приросты скромные, а лохматость растет геометрически и желание позаимствовать ее для своего будущего шедевра все меньше и меньше. Вот сделать поддержку инверсии, а то может быть даже и цвета, это было бы интересно и практично.
Так-то вообще, между прочим, для казуальщика режим 64 символа в строке тоже может быть интересен. Понятно, что в нем нет такой интриги, как мы тут получаем с 80.
BTW, прокрутка через dad h -- огонь. Я бы никогда не додумался, хотя теперь, увидев, развидеть это уже не могу.
Если нужен максимум гибкости (возможность задавать цвет символов и цвет фона) при сохранении сравнительной компактности - надо рисовать через setpixel. Скорость будет соответствующая.
Почему так категорично? Разве прямой и инверсный вывод в двух плоскостях -- это не то, что нужно для вывода произвольной комбинации цвета-фона?
Еще "полный 0" и "все 1" в рамках знакоместа. Или 4 варианта setpixel для 4 цветов.
Мне цветной текст в HiRes не особо нужен, да и сделать его не так уж сложно с имеющимися наработками. Зато уже много лет никак не соберусь (вернее надо бы, но не хочется) сделать полный опрос клавиатуры.
Это может быть не очень практично, но есть что-то волшебное в таком не без труда добытом тексте, да еще и в цвете.
Пока до такой крутотени еще далеко. Мне очень тяжело дается преодоление 512 точек, особеннно в цвете, поэтому я пока сбацал такую незамысловатую шпору.
- - - Добавлено - - -
Вообще с хорошей шпорой делов-то оказалось не так и много. Далеко не идеал конечно пока и не совсем честно цвета работают (цвета 1 и 2 не затирают друг друга), но в общем это цветной текст в режиме 512 и тормозит все-таки не совсем как через setpixel.
Цветной текст в HiRes с минимальными доработками - это хорошо. Платой за простоту, насколько понимаю, является ограничение числа комбинаций цветов, но основные на первый взгляд есть.
А я добрался до исходников патчей РДС. В 205 еще и фонт надо заменить.
Ты имеешь ввиду разные сочетания фона и переднего плана? Их неудобно получать, но есть-то они есть. Но пользоваться этим пока неудобно, потому синий текст например затирает все -- потому что он красный + зеленый -- а красный и зеленый своих дополнительных плоскостей не затирают -- потому что так и получается синий -- и это можно доделать как-то более оптимально, чем вызов пучара дополнительного цвета с пробелами. Тогда уж можно разойтись и сделать установку комбинаций фон + передний план и поддержку расширенных ESC-команд VT-52.
Не самый скорострельный текст получается, чего и говорить.
- - - Добавлено - - -
Дема с вариантами милых сердцу любого бэкашечника и писишечника восьмидесятых палитр.
Понятно, ну это потом, если. У меня пример-то пока на коленке бацаный.
Подход к цвету, без рекордов.
Прекрасно!
Я чуть чуть только дописал красоты и палитры вернул.
Теперь и мне видно, что шрифт немного мутант - в основном CP1251, а псевдографика из ALT.