dos

Браузер «Арахна»

Вряд ли на свете много людей, которые в 2026 году добровольно пытаются выйти в интернет из ДОСа. Но меня эта идея почему-то всегда цепляла. Есть в этом что-то очень уютное: современный интернет, гигабитные сети, беспроводной доступ, — и рядом с этим чёрный экран, AUTOEXEC.BAT, CONFIG.SYS и ощущение, что если где-то ошибёшься в одной цифре IRQ, то ничего не взлетит.

Не то чтобы меня прямо сильно тянуло «пользоваться интернетом из ДОСа». Понятно, что практического смысла в этом почти никакого нет. Но как эксперимент — очень интересно. Я давно знал, что для ДОСа существуют браузеры. Наверное, даже не один. Значит, теоретически это всё можно собрать: поставить ДОС, настроить сеть, добыть TCP/IP-стек, запустить какой-нибудь браузер и посмотреть, как это вообще выглядит.

Сложностей, в общем-то, не так уж много. Главная — аккуратно собрать по всему интернету кучу старого софта, разложить его по каталогам и не перепутать, что должно грузиться в CONFIG.SYS, что — в AUTOEXEC.BAT, а что надо запускать руками. Для усидчивого человека это не проблема, но процесс очень характерный: вроде бы ты просто хочешь открыть сайт, а в итоге сидишь и думаешь, какой драйвер мыши занимает меньше базовой памяти.

Я наскоро состряпал виртуалку в 86Box, накатил туда MS-DOS 6.22, добавил драйвер сидирома, мышь, Volkov Commander и начал оживлять сеть. В качестве сетевой карты выбрал эмулируемую NE2000 — это такой классический вариант для подобных экспериментов. В 86Box удобно включить SLiRP, и тогда не надо отдельно городить мосты на хостовой машине: виртуальная ДОС-машина получает сеть как будто через маленький виртуальный роутер.

Дальше понадобились две вещи: пакетный драйвер для NE2000 и mTCP. Пакетный драйвер — это такая прослойка, которая даёт ДОС-программам доступ к сетевой карте. А mTCP уже даёт нормальные утилиты поверх TCP/IP: DHCP, ping и прочие радости цивилизации. Я делал по одной из инструкций, только с поправками под свою конфигурацию.

Софт пришлось собирать из разных мест. Почти всё нашлось на old-dos.ru, туда же сходил за Volkov Commander. Без него в ДОСе быстро становится тоскливо: можно, конечно, всё делать командами, но двухпанельный файловый менеджер сразу возвращает ощущение нормальной жизни. Для мыши поставил CuteMouse v2.1b4 — в первую очередь потому, что он маленький. В ДОСе это всё ещё имеет значение: каждый драйвер отъедает кусок базовой памяти, а её всего 640 КБ, и браузеру потом тоже где-то надо жить.

Отдельный маленький квест — освободить побольше базовой памяти. Может показаться, что 640 КБ — это просто анекдот про Билла Гейтса, но в мире ДОСа это очень важная штука. Поэтому HIMEM.SYS, EMM386 и прочее снова становятся не музейными словами, тут придётся всё настроить как надо.

Я вынес наверх всё, что получилось: драйвер сидирома, MSCDEX, клавиатуру, мышь, сетевой драйвер. В CONFIG.SYS у меня в итоге появились HIMEM.SYS, EMM386, DOS=HIGH,UMB и DEVICEHIGH для части драйверов. В AUTOEXEC.BAT — загрузка SMARTDRV, путь к mTCP, русская кодовая страница, драйвер NE2000, DHCP и CuteMouse. Всё что можно загружается командой LH.

После всех этих манипуляций mem стал показывать уже вполне приличную картину: около 609 КБ свободной базовой памяти и ДОС, живущий в HMA. Раньше с этим так много возились не потому что это было интересно, а потому что иначе программы могли просто не запуститься.

Сеть завелась неожиданно буднично. NE2000 загрузился почти сразу (в первой попытке я указал не совсем верные параметры), mTCP через DHCP получил настройки, после чего стало понятно, что ДОС-машина действительно видит внешний мир.

Самый странный момент — набирать ping в чистом ДОСе. Оно не просто запускается, а реально пингует. Мозг немного сопротивляется.

После этого я поставил браузер «Арахна». И вот тут эксперимент стал совсем прекрасным. Потому что это уже не просто «я настроил сеть». Это настоящий интернет.

Конечно, пользоваться этим всерьёз невозможно — браузер по современным меркам совсем примитивный, поддержки HTTPS нет, но посмотреть было интересно.

Скриншот веб-страницы NeverSSL в браузере Arachne 1.99: объяснение, что сайт использует незашифрованный HTTP для обхода проблем с Wi-Fi, и почему это небезопасно.
Браузер «Arachne» — один из немногих, работающих под ДОС

12 комментариев

Программа с именем 0xFF

В ДОСе, как может кто-то ещё помнит, была своя, отличная от всего, кодировка русских букв, так называемая CP866. Это однобайтовая кодировка, то есть в таблице символов всего 256 позиций.

Поэтому странно, что пробельных символов в ней два, один из них — обычный пробел с кодом 32, именно его операционная система считает пробелом, второй — с кодом 255, он выводится как пробел, но считается обычным символом.

Не помню, использовалось ли это свойство для чего-то полезного или интересного, но на днях прочитал как развлекались с его помощью в те времена:

А 255 символ запретили? 30 лет назад, еще под MSDOS, переименовали утилиту переворота экрана в 255 символ и вставили в autoexec.bat. Хозяин компа уже психовать начал и монитор переворачивать :)) Показали ему прикол…

Ну то есть переименовали программу так, чтобы её имя выглядело как пробельный символ и добавили её в скрипт автозагрузки. Хозяин компьютера, видимо, проверял скрипт, ничего не находил и не понимал что происходит.

Мне стало интересно проверить — действительно ли это работает? Благо ДОС можно сейчас запустить даже в браузере.

Тут надо пояснить, что «настоящий» пробел для этого не годится — ДОС просто не распознает его в автозагрузке как имя файла для запуска.

Я не знаю как раньше вводили символ с кодом 255 в командную строку, поэтому просто набросал программу на ассемблере, которая переименовывает файл mem.exe (которая обычно есть в составе ДОСа) в  .com:

org 100h

section .data
    oldName db 'MEM.EXE', 0
    newName db 255, '.COM', 0

section .text
global _start

_start:
    mov ah, 56h
    lea dx, oldName
    lea di, newName
    int 21h

    mov ax, 4C00h
    int 21h

Необходимое пояснение: расширение обязательно, иначе ДОС не поймёт, что файл запускаемый. При запуске его можно не указывать — операционка догадается сама что именно подставить.

На следующем шаге я скомпилировал программу у себя прямо в «МакОСи» и вывел в шестнадцатеричном виде:

$ hexdump -C <(nasm -f bin rename.asm -o /dev/stdout)
00000000  b4 56 8d 16 14 01 8d 3e  1c 01 cd 21 b8 00 4c cd  |.V.....>...!..L.|
00000010  21 00 00 00 4d 45 4d 2e  45 58 45 00 ff 2e 43 4f  |!...MEM.EXE...CO|
00000020  4d 00                                             |M.|
00000022

Далее набрал её в кодах при помощи команды DEBUG и запустил. В текущей директории появилась программа с нужным именем:

Скриншот интерфейса MS-DOS 6: вывод команды dir для диска C:\ с файлами COMMAND.COM, WINA20.386, CONFIG.SYS, AUTOEXEC.BAT и другими, объёмом 96 653 байт, свободно 42 786 816 байт.

Для последнего шага мне нужно было как-то снова получить символ 255 в командной строке. Для этого я перенаправил вывод команды DIR в файл START.BAT и отредактировал получившееся при помощи команды EDIT — убрал всё лишнее, кроме символа с именем команды (кажется у меня в файл попали ещё и лишние переводы строки, но они роли не играют).

Попробовал запустить, сработало!

Скриншот командной строки DOS: после выполнения команды TYPE start.bat и запуска start отображается таблица распределения памяти (640K всего, 64K использовано, 576K свободно).

8 комментариев

86-DOS version 0.11

Мне интересно иногда посмотреть на старые операционные системы и программы, которые я не застал или пропустил в своё время. Предтечу MS-DOS, которая называлась 86-DOS, я уже как-то видел, но там речь шла о версии 1.0, а тут в доступе появилась 0.11.

Довольно долго разбирался как её запустить, опишу, чтобы не забыть, мало ли, вдруг когда-нибудь пригодится.

Первом делом скачиваем IMD-образ операционной системы и распаковаем его из-под ДОСбокса набором утилит ImageDisk 1.19. Получившийся после распаковки образ переименовываем в 86dos.imd.

Качаем первый попавшийся эмулятор Altairz80 под требуемую операционную систему, компилируем, в папку эмулятора кладём файлы scp86mon.txt, scp86mon.rom и образ операционной системы.

Вводим команду ./altairz80 scp86mon.txt, потом уже там несколько раз «Ввод», латинскую B, снова «Ввод» и, по идее, всё должно запуститься.

Скриншот терминала эмулятора Altair 8800: запуск 86-DOS, команда DIR показывает файлы, включая CHESS; пользователь выбирает чёрных и делает первый ход в шахматной игре.
Версия 86-DOS версии 0.11, запущенная в эмуляторе Altairz80

Смотреть там, конечно, особо не на что, хотя есть редактор, ассемблер и шахматы, а так же работают кое-какие привычные со времён ДОСа команды — COPY, DIR, TYPE и RENAME. Из непривычных есть ERASE, которая удаляет файл и CLEAR, очищающая содержимое диска.

Теперь могу говорить, что я своими собственными глазами видел самого раннего предка MS-DOS, которого только можно найти в интернете.

Оставить комментарий

Как я был лаборантом (про программирование)

В разделе «обо мне» написано, что я работал лаборантом при кафедре ВМК. Иногда меня спрашивают — чем же я там занимался. Отвечаю: в основном, программно решал возникающие задачи, программировал я тогда, по большей части, на ассемблере x86. Поясню на примере.

В зоне отвественности кафедры было тогда (1996-97 гг.) четыре комьютерных класса. Везде, в основном, DOS. Типовое ПО (MS-DOS 6.22, Norton Commander, TurboC, TurboPascal и т. п.), непрерывный поток студентов. Из этого проистекают две проблемы: во-первых, студенты пишут файлы на диск, во-вторых, студенты удаляют и модифицируют уже существующие на диске файлы.

Первая проблема приводила к тому, что дисковое место быстро исчерповалось (а определить куда студент положил свою россыпь файлов и не стереть лишнего — та ещё задача), второя — к тому, что в середине дня приходилось (с дискет!) переставлять, например, TurboPascal или что-то даже ещё более тяжёлое (типа матстатистики).

Вот такую проблему требовалось решить.

В DOS было (и есть) API — множество фукнций, вызываемых через так называемое прерывание №21 (были и другие прерывания, обслуживаемые DOS, но это — основное). Когда программы под DOS работали с файлами они использовали это API.

Придумал я, в итоге, следующее. Винт форматируется, туда ставится DOS, Norton Commander и другое типовое ПО. Все файлы этого ПО помечаются атрибутом ReadOnly (это стандартный атрибут). Я написал программу, которая подменяет собой функции DOS для работы с файлом, которая запрещает модифицировать этот атрибут и делать что-то с этим файлом (точнее, в этом случае я возвращал код успешного завершения, но с файлом ничего не делал).

Свою программу я добавил в autoexec.bat, запретил остановку загрузки DOS (клавиши F5, F8), boot с дискеты и поставил пароль на BIOS.

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

Для специалистов: int 25/26/13 я никак не подменял, но квалификации студентов тогда не хватало, чтобы обойти защиту.

22 комментария