Pull to refresh

Графический «велосипед» по мотивам Turbo Vision (дела давно минувших дней)

Reading time4 min
Views12K
Относительно недавно, прочитав местную статью "Демо, которых никто никогда не видел", решил, что тоже стоит пролить свет на некоторые плоды своей программистской молодости.

Начиналось с этого:
image


В бытность мою в начале 1996 года студентом первого курса и обладателем компьютера "Поиск",
досталась мне от сокурсника чудесная книга Фаронова «Turbo Vision», которая заинтересовала меня в объектно-ориентированном программировании, и в Turbo Vision, в частности (там всё было так «вкусно» описано)).

Здесь стоит упомянуть, что тот мой комп (обладая 640 Кб ОЗУ, приводом для 5.25" 720Кб дискет и телевизором вместо монитора) «не тянул» Turbo Pascal 6.0, в составе с которым шла библиотека Turbo Vision, да и эмуляция текстового CGA-режима на «Поиске» была ужасна — символы могли быть, если память не изменяет, белыми/голубыми/розовыми на чёрном фоне, либо черными на голубом/розовом/белом фоне.

Короче, свой графический аналог Turbo Vision под CGA-графику (320x240, 4 цвета) писал я на Turbo Pascal 5.5 с кусками кода на Turbo Assembler 2.5 (урезанный комплект этого хозяйства как раз умещался на 720Кб-дискету).

Нюансы CGA-реализации:
  • Библиотеки для работы с графикой не используются
  • Вся отрисовка ведётся через промежуточный буфер, в котором каждому пикселу соответствует 1 байт (для устранения мерцания и увеличения скорости отрисовки).
  • Отрисовка частично перекрытых элементов осуществляется с использованием массива-маски (т.е. из буфера на экран выводятся только немаскированные части изображения).
    Для экономии памяти каждому элементу маски соответствовал квадрат 4x4 экранных пиксела, соответственно, позиция и размеры элементов были кратны 4-м.
  • Самодельный пропорциональный растровый шрифт (стандартные в разрешении 320x240 выглядели гигантскими).
  • Эмуляция мыши через клавиши управления курсором цифрового блока (на «Поиске» мыши не водились)).

Никакой полноценностью на тот момент моя программка не могла похвастать, это, скорее, была «технодемка», которой я хвастался перед сокурсниками (окна перетаскиваются, кнопки нажимаются, часики идут))
Выглядела она именно так, как на первой картинке.

Осенью 1996 года отец купил (ценой больших усилий: накопления и взятия взаймы долларов, спасибо ему) мне полноценный компьютер (AMD 5x86-133, 4Mb RAM, видео S3 Trio64 1Mb, 850Mb HDD, 14" монитор ARX).
Появилась возможность использовать Borland Pascal 7.0, мышь и 256-цветные SVGA-режимы.

Следующая реализация:
  • использовала 256-цветные VESA-режимы, для чего ставился UniVBE — эмулятор VESA-видео-BIOS (редкие видеокарты на тот момент имели соответствующую встроенную поддержку);
  • отрисовка крупных элементов, не помещающихся целиком в буфер, велась горизонтальными полосами;
  • рисовала полноцветный курсор мыши, который мерцал только если накладывался на обновляемую область (т.е. мерцал гораздо меньше, чем в большинстве тогдашних графических программ);
  • заимела поддержку отрисовки 256-цветных картинок формата BMP;
  • включала в себя некоторые «портированные»/«допиленные» для поддержки графики исходники Turbo Vision.

В последующий период (по 1999 год) указанные наработки были использованы при написании некоторых программок.

Недоделанная обучающая игра для кабинета информатики в школе:


Курсовая работа — игра про фабрики/сырьё/продукцию и прочее «экономическое моделирование»:


Был реализован простейший недоредактор растровых пропорциональных шрифтов (до этого был лишь один мелкий пропорциональный шрифт от CGA-версии, в качестве крупного шрифта приходилось использовать сконвертированный шрифт с фиксированной шириной символов):


Лабораторные работы по статистическому моделированию:


Лаба по логическому программированию:


Часть лаб по компьютерной графике:


В итоге, к 1999 году накопилось следующее:
  • реализованы растровые регионы для отсечения невидимых областей при отрисовке, вследствие чего ограничения на размер/положение элементов были устранены (также хотелось сделать на основе регионов видимые элементы произвольной формы, но не сделалось);
  • реализация алгоритма Флойда-Стенберга для адаптации загружаемых картинок к используемой фиксированной палитре (8-битный цвет имел формат RRRGGGBB, т.е. под интенсивность красной и зеленой составляющей выделялось по 3 бита, синей — 2 бита);
  • были «портированы» некоторые стандартные элементы управления (список, выпадающий список, диалоговые окна выбора файлов и пр.);
  • возможность отображать/править таблички (реализация TGrid)
  • в связи с увеличением доступного объема памяти и «победным шествием» Windows 9x постепенно был утрачен интерес к DOS-программам.



В рамках подготовки статьи захотелось увидеть, как будет смотреться мой DOS-овский графический WVision в FullHD-разрешении, но, к сожалению, не нашёл VESA-кода для режима 1920x1080x8. Лишь 1280x1024 удалось задать, сделал снимок экрана (вот только habrastorage его ужал до 800x640, увеличив при этом размер файла почти в 6 раз)):


Исходники и рабочие exe-файлы доступны в архиве WORKS.7z
(вот только исходные тексты CGA-реализации потерялись где-то на пятидюймовых дискетах, остался лишь исполняемый файл windy0.exe).
Минимальные требования для запуска: 386-совместимый процессор, 640Кб ОЗУ, 512Кб видеопамяти, поддержка VESA со стороны видео-BIOS (windy0.exe пойдёт и на 8086 с CGA-графикой).
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 167: ↑163 and ↓4+159
Comments80

Articles