Вчера перед сном вспоминал, что ещё я такого программировал в детстве, о чём можно упомянуть, кроме программы «Паррот», о которой я рассказывал около месяца назад. Вспомнил про утилиту s-tools, которую мы писали вдвоём с братишкой на ассемблере x86 под ДОС.
Название придумал я. Расшифровывалось оно как «Stepanischevs’ tools», а сокращение намеренно было сделано похожим на «stools» — «табуретки», поэтому я нередко так эту утилиту и называл.
Это был набор утилит в одном файле и самый объёмный код на ассемблере, который мы когда-либо писали. Со временем мы сделали свой собственный «швейцарский нож» для командной строки, решая какие-то свои проблемы и натаскивая понравившиеся идеи.
Утилиты вызывались, если я ничего не путаю, при помощи номерного ключа, после которого шли параметры самой утилиты. К каждой из них прилагалось описание на русском языке. Часть программ была «резидентами» (TSR), и некоторые из них умели загружаться в HMA.
В ДОСе были специальные вызовы, при помощи которых можно было выделить себе в HMA кусочек памяти. Но поскольку это был один сегмент, программам приходилось модифицировать себя, чтобы поменять у себя внутри адреса ячеек памяти и использовать только ближние вызовы (jmp near или call near).
Запись в моём ежедневнике, который я использовал как блокнот с описанием вызовов для выделения памяти в HMA
Я попытался вспомнить что именно умели «табуретки», но вспомнил только малую часть, разумеется. Утилиты в моём списке идут не по порядку следования, я его просто не помню.
Первое, что я вспомнил — в отдельном файле s-tools.ovl лежал шрифт, который мы вынули из какой-то утилиты. Буквы в нём казались больше, хоть и занимали то же стандартное для ДОСа знакоместо. Этим шрифтом наша утилита умела заменять системный. Расширение файла объясняется тем, что мы тогда неправильно понимали термин «оверлей» и думали, что это просто любой внешний ресурс.
Вторая утилита умела поднимать тайминги памяти на PC XT, идея была подсмотрена в каком-то журнале и позже, когда я начал лаборантить во время учёбы в Университете, она мне пригодилась — у меня был целый класс с этими компьютерами. Они были настолько медленными, что было заметно как буква за буквой выводится текст на экране. Так что даже небольшое поднятие производительности добавляло комфорта.
Третья утилита решала проблему буфера клавиатуры. Компьютеры в те времена работали так медленно, что не успевали обрабатывать весь ввод пользователя, он попадал в специальный буфер, а уже оттуда его забирали программы. Если вы печатали достаточно быстро, вы вполне могли упереться в размер буфера и услышать звуковой сигнал, означающий, что вам надо подождать.
Буфер можно было переместить, но недалеко — в пределах, если ничего не путаю, первых 64 килобайт ОЗУ. Я тогда нашёл в ДОС два неиспользуемых зарезервированных участка памяти, куда, на выбор, и переставлял этот буфер. Второй из этих участков в какой-то момент стала использовать программа сжатия диска на лету, которой мы тогда пользовались, из-за чего однажды разрушилась файловая система нашего компьютера (он был один на двоих).
Четвёртая утилита меняла палитру экрана. Если верно помню, в каком-то альтернативном драйвере ANSI.SYS была возможность заменить палитру на более глубокую. Нам это так понравилось, что мы позаимствовали эту идею. Я помню, что легкомысленно-синий цвет «Нортона Командера» превращался в что-то похожее, что я попытался изобразить на скриншоте ниже.
«Волков Командер» с цветом панелей в альтернативной палитре
Следующая утилита выводила по нажатию какой-то горячей клавиши (наверное её можно было задавать) таблицу ASCII. Для нас с братишкой это было очень полезно — мы много программировали и таблица символов была часто нужна. Таких программ хватало, но мы написали свою.
Шестая утилита умела записывать в файл нажатые клавиши, а потом их «проигрывать» — это было удобно для автоматизации каких-нибудь механических действий. Помню долго думал как выходить из такой программы, ведь надо как-то различать ситуации, когда мы ещё записываем клавиши и когда мы хотим выйти. На мышь тогда полагаться было нельзя — её могло не быть на компьютере, где использовалась утилита, поэтому я придумал выходить по троекратному нажатию каких-то модификаторов — шифту, контролу, альту или, может, всем сразу, не помню точно.
Седьмую утилиту я написал уже когда учился в Университете. Как я уже упоминал, я тогда работал лаборантом и, как и все лаборанты, нередко во что-то играл в рабочее время — когда занимались студенты, просто сидеть и смотреть за классом было скучно. Поскольку моей начальнице это не нравилось, я написал утилиту, которая скрывала экран игры при помощи горячей клавиши. В стандартном ДОСе тех времён многозадачности не было, так что это был единственный способ.
Позже кто-то принёс альтернативную утилиту, которая умела скрывать экран ещё и игр, который использовали «расширители ДОС» (например, «Дум»), чего моя утилита не умела. Я старался доработать своё решение, но так и не понял как это сделать.
Восьмую утилиту, возможно, следовало бы вспомнить первой. Не исключено, что с неё и начались «табуретки», но это не точно. В те времена мы много работали с дискетами и, если на них портился сектор на нулевой дорожке, где помещалось оглавление файловой системы, то её можно было выбрасывать — несмотря на то, что другие сектора в таких случаях помечались как «плохие» и просто не использовались, тот же фокус с нулевой дорожкой не проходил.
Один из наших соотечественников написал драйвер pu_1700, позволявший выбрать другую дорожку для хранения оглавления. Было только одно неудобство — драйвер приходилось запускать с разными параметрами руками, чтобы работать с разными дискетами.
В «табуретках» была резидентная программа, которая по горячей клавише патчила память pu_1700, меняя дорожку с оглавлением. Это позволяло быстро переключаться между стандартными и нестандартными дискетами.
Больше никаких подробностей я чётко не помню.
Смутно припоминаю, что была некая утилита для сканирования файловой системы, которую точно писал братишка, но что она делала вспомнить не могу. Кроме того, было какое-то гадание по «алгоритму Пифагора» — там были какие-то математические операцией с датой и, возможно, временем рождения, получались какие-то цифры, которые как-то интерпретировались. Это были 90-е, тогда все увлекались мистикой.