Энтузиасты создали авиасимулятор для DOS и это массовая мультиплеерная игра в браузере
Вчера мне скинули эту имбу! Это действительно dos-игра работающая на нашем веб эмуляторе JS-DOS с моментальным коннектом на глобальный сервер к другим игрокам.
Проект OWL FLY II это многопользовательский авиасимулятор воздушного боя, написанный на языке ассемблера для процессора 8086. Две эскадрильи ведут войну на истощение над процедурно сгенерированным островом, создаваемым на основе двухбайтового начального числа (seed). Именно поэтому подключение к сеансу происходит мгновенно: пакет данных содержит это число, ваш компьютер выстраивает тот же остров, тот же город и те же облака — и вы уже на месте.
Вы пилотируете F-15 с реалистичной приборной панелью и радаром, которому для обнаружения целей необходимо излучать сигнал; зенитные орудия ведут огонь по указанным вами целям, а запас ресурсов самолета не восполняется автоматически. В вашем распоряжении четыре ракеты, 250 снарядов и топлива на одиннадцать минут полета. Боевой вылет завершается, когда заканчивается что-либо из перечисленного.
Игра весит всего 105 килобайт и сейчас в разработке OWL FLY III - новая улучшенная версия c поддержкой различных графических режимов.
Всем отличной игры и времяпровождения!
Мой канал о разработке и портировании игр в браузеры
Сеть ИОЛА, MS-DOS и Pacman: эксперимент с сетевыми адаптерами 80-х
Некоторое время назад я пытался заставить работать сетевые карты ИОЛА, но у меня не все получилось. Обо всем рассказано здесь.
Сегодня, поднабравшись практических знаний и проведя пару дней в экспериментах, на мой скромный взгляд, удалось добиться полноценной работы сети, но судить об этом вам.
Написано специально для ▶️Timeweb Cloud и читателей Pikabu.
Так, начнем прямо с сетевых карт:
Трудно не заметить, что сетевые карты разные. Разница — в компонентном различии, количестве микросхем, использовании восьмибитного и шестнадцатибитного разъёмов ISA, цвете текстолита (сверху серо-голубой или бирюзовый, а снизу зелёный). А общее у них одно — максимальная скорость 2 Мбит/с.
❯ Настройка сетевой среды под MS-DOS
Для работы сетевой карты нам понадобится осуществить следующие настройки.
У нас есть пакетный драйвер, для MS-DOS.
Он прописывается в autoexec.bat с использованием следующих параметров.
Параметры, указанные в шестнадцатеричной системе счисления (hex), следующие:
0x60 — стандартный программный номер прерывания (interrupt), через которое сетевое приложение, например FTP-сервер, общается с сетевым драйвером;
0x20 — уникальный идентификатор рабочей станции в сети;
0x05 — аппаратное прерывание;
0x318 — адрес используемого в системе порта.
Идем дальше. Для осуществления сетевого взаимодействия, нам понадобится вот этот замечательный пакет.
Mtcp не «новодел». Cогласно информации с официального сайта: «mTCP is a hobby project that I started in 2005». Так что в этом вполне аутентично.
Mtcp настраивается достаточно просто.
В autoexec.bat, нужно указать переменную MTCP:
SET MTCPCFG=c:\mtcp\MTCP.CFG
В конфигурационном файле MTCP.CFG указать параметры, относящиеся к статическому IP-адресу. Почему «статика»? Потому что для MS-DOS отсутствует DHCP-сервер. Есть, конечно, «Microsoft LAN Manager», но пакет тяжеловат, да и оперативную память отъедает прилично. А других вариантов использовать динамическую адресацию я не встречал. Речь идёт о двух машинах без шлюза к маршрутизатору.
Сетевую среду под MS-DOS мы настроили — посмотрим физические соединения.
❯ Физическая среда
Выдержка из документации к сетевой плате ИОЛА:
Для топологии «звезда» используется коаксиальный кабель с волновым сопротивлением 75 Ом (РК-75-2, РК-75-4). Для соединения на длинные расстояния > 800 м. могут использоваться более толстые кабеля: РК-75-7, РК-75-9 и т.д. Так же расстояние зависит от качества кабеля, так для кабеля РК-75-4-113 расстояние увеличивается до 1000 м.
Наш кабель выглядит так:
Кабель с одним и тем же волновым сопротивлением может иметь разный диаметр. Чем больше диаметр кабеля — тем на более далёкие расстояния возможна связь. Полезно.
В сети не должно быть кабелей, второй конец которых ни к чему не подсоединён («висячий конец»). Не допускается образования петель в сети. Хм, ввиду того, что подопытные компьютеры расположены вплотную, им не помешало то, что кабель был свернут кольцом. С другой стороны, не повлияло ли это на скорость передачи? А от «висячего конца» мы спасёмся терминатором на 75 Ом.
В собранном виде BNC-коннектор выглядит так:
В документации есть упоминание о бездисковой загрузке:
Сама плата выглядит так:
Я не знаю, какая микропрограмма зашита в ROM, установленную на эту платку. Если бы эта ПЗУ была установлена в «кроватку» — считал бы программатором, а выпаивать ещё не решился. Что должно быть со стороны, осуществляющей бездисковую загрузку, — в документации не сказано. Сталкивались с таким?
❯ Настройка сетевой среды под W2K Server
А теперь Windows 2000 Server? Не проблема, есть драйвера и для неё.
Ставим драйвер:
Проверяем аппаратное прерывание, конфликтов нет:
Устанавливаем статический IP-адрес:
Копируем DOOM для проверки сети. Почему DOOM, а не Pacman? Да просто он несколько «тяжелее весит» — и мне хотелось посмотреть, не будет ли ошибок при протяжённом копировании. Как увидите на ролике внизу — сетевая передача была осуществлена успешно.
Видим присвоенный DHCP-сервером IP-адрес клиентской машины 10.0.0.2:
Все настроено и готово.
❯ Теперь в игры
Сложность была вот в чём. Скажите, много ли Вы знаете сетевых игр для чистого MS-DOS? Навскидку, кроме DOOM-like, Command & Conquer: Red Alert, Warcraft II: Tides of Darkness, Dune 2000, Quake — ничего не вспоминается. А теперь немного усложним: наша сеть не использует IPX/SPX, а только TCP/IP? Теперь и вообще практически ничего — поиском требуемого я не нашёл. На помощь мне пришла драгоценная находка, в виде этого ресурса.
Здесь есть то, что нам нужно: игра Pacman с поддержкой TCP/IP. Целевых операционных систем здесь много, и самое главное — есть MS-DOS. Нижепродемонстрированный Pacman работает даже на IBM PC XT с процессором Intel 8088. Можно сказать — на минимальной конфигурации.
Игра, согласно документации, запускается просто. Выдержка из README:
Примеры запуска в ОС DOS:
pacman.exe — одиночная игра или 2 игроками на одной клавиатуре. Управление стрелочками — игра за Pac-Man (1-й игрок), управление WASD — игра за Pac-Girl (2-й игрок).
pacman.exe 7777 — запуск сервера, ожидающего подключения 2-го игрока на 7777-й порт (порт можно указывать любой незанятый). Управление стрелочками — игра за Pac-Man (1-й игрок).
pacman.exe 192.168.1.101 7777 — запуск клиента, подключающегося к запущенному серверу на хосте 192.168.1.101 и 7777-му порту. Управление стрелочками — игра за Pac-Girl (2-й игрок).
Создаём серверную часть: pacman.exe 7777
и присоединяемся клиентом: pacman.exe 10.0.0.1 7777
Пояснение к видео. На самом сервере Pacman запустился с артефактами экрана и не отображался ни в окне, ни в полноэкранном режиме. Вероятно, проблема с моей видеокартой. Решив, что это не принципиально, я демонстрирую сетевую игру на одном экране. Управляю обоими Пакманами с клавиатур двух компьютеров, соединённых в сеть. Результат мы видим на одном экране справа. Главное, что Пакманы перемещаются, а это значит — сеть работает.
Результат:
❯ FTP-сервер для MS-DOS
Взглянем, как работает FTP-сервер, запущенный под MS-DOS. Настройка FTP-сервера в пакете MTCP сводится к редактированию файла ftppass.txt, а конкретнее — к заданию имени пользователя, разрешённого «залогиниться», и указанию его пароля. Далее, запустив сам сервер командой FTPSrv, видим следующую картинку.
Что же мы видим? FtpSrv запущен на IP-адресе 10.0.0.1 и слушает стандартный порт 21. Также мы видим, что удалённый пользователь с именем «root» подключился с IP-адреса 10.0.0.2.
FTP-сервер мы запускали, чтобы копировать игры по сети, ну и проверить её работоспособность. Не бегать же с дискетками... Что копируем мы? DOOM, разумеется.
Если не лень, прошу взглянуть на видео — можно перематывать, я записал в реальном времени. Для полноты эксперимента запустил одиночную игру как демонстрацию того, что дистрибутив передался успешно. На процессорах 80386 эта игра — как слайд-шоу, но нужно было убедиться в работоспособности.
❯ Заключение
Для меня остались два открытых вопроса.
Первый.
Удалённая загрузка по сети. В документации указана возможность загрузки по сети с использованием BOOT ROM. Вопрос в следующем: как должен быть настроен компьютер, обеспечивающий сетевую загрузку? Какие файлы операционной системы, где и на чём расположены — и передаются ли они на бездисковую загружающуюся станцию?
Второй.
В использованном ресурсе есть упоминание про драйвера для Linux, только ссылки все «битые». Если есть у кого упомянутые драйвера, прошу поделиться.
На этом пока что всё. Надеюсь, вышеупомянутый очерк был интересен и полезен.
Благодарю за уделенное время :)
Больше интересных статей и новостей в нашем блоге на Хабре и телеграм-канале.
Адресация видеопамяти CGA в графических режимах (ни один ИИ не знает правильный ответ!)
Почему чётные и нечётные строки начинались с адресов 0000h и 2000h, а не подряд?
Потому что микросхема Motorola MC6845 поддерживала до 127 символьных строк, поэтому 200 графических строк представлялись ей как 100 строк символов высоты 2. Номер внутрисимвольной строки и превращался в добавку 2000h!
Как IBM отбросила развитие персоналок на 13 лет назад
«Именно в либеральной Америке изобрели PC, захвативший мир» — одна из любимых песенок либералов (они тупые и не знакомы с ругательствами HMA/EMS/XMS).
На самом деле задачей IBM было задержать приход 32 бит на массовый потребительский рынок, что она и сделала.
68000 вышел ещё в 1980 году, но Win32 API только в 1993.
Ответ на пост «PRINCE OF PERSIA: ПЕРВАЯ ИГРА С НАСТОЯЩЕЙ СМЕРТЬЮ»1
О, эта игра меня тоже захватила в своё время, но чуть иначе...
Отец приволок с работы один из компов, которым в нашей деревне никто не мог дать ладу.
Это был древний теперь IBM XT 8088 с монохромным адаптером Hercules и удивительным желто-черным монохромным же монитором. Вот он:
Страшный зверь!
- Целых 640 Кб оперативной памяти! А кому нужно больше-то?
- Жесткий диск на 20 Мб. Нет, не гигабайт, а именно МЕГАБАЙТ!
- Дисковод 5.25``, который был способен записать на дискету всего лишь 360 кб. Не 1.22 Мб, как более свежие аналоги, а всего лишь 360 Кб.
Принц персии на нём выглядел как-то вот так:
Здесь монитор не тот, но изображение выглядело примерно так же.Разве что занимало визуально всю площадь экрана. Видимо мой монитор был чуточку посвежее.
А вот нашел ролик, который иллюстрирует в точности звук, с которым запускался XT:
Здесь в ролике тоже другая модель, но звук идентичный один в один.
Кулер этого чудовища выдул краску в обоях в виде круга. С удивлением обнаружили это. когда убрали комп. Потом конечно переклеили обои, но было удивительно насколько мощный поток воздуха, что обесцветил заметно обои в круглом пятне напротив лопастей.
Особенность Принца Персии на этом компе было в том, что как-то неправильно учитывалась частота процессора, к которой был привязан фрейм-рейт, и игровой процесс был замедлен раза в четыре. То есть на игру отводилось, получается, часа 4, но всё было в слоу мо. все движения тоже в 4 раза замедлены.
И это ничуть не упрощало игровой процесс для меня. Да, можно было насобачиться и филигранно двигаться вовремя нажимая клавиши, благодаря замедлению времени, однако игра без возможности сохранения, даётся лишь 4 часа и пауза, кажется, не останавливала таймер, ошибки всё равно происходили, а сидеть так долго за монитором было немыслимо, ведь "глаза же портятся!".
Вообще на то, что сидеть перед этим монитором как минимум е безопасно, указывал специальный накладной стеклянный тонированный экранирующий фильтр с проводом заземления. Если его снять, то поверхность дисплея ощутимо электризовалась поднимая дыбом волосёнки на руках. Кактусами тогда ещё не придумали обезвреживать радиацию мониторов, потому родители крайне щепетильно относились к моему экранному времени, а играться в игрушки и вовсе считалось совершенно бесполезным и даже вредным занятием.
В общем, играть доводилось лишь украдкой от бабушки когда родителей не было дома.
Если начало игры было неплохо знакомо, то финальные уровни были терра инкогнита, усталость к этому времени накапливалась, а нервы щекотала повышающаяся вероятность внезапного прихода родителей и неизбежная взбучка, потому что бабушка обязатльно наябедничает.
Что касается кишков и кровищи, то мою детскую психику конечно немного цепляла натуралистичность, с которой что-то тянется за зубьями укусившей при неловком движении гильотины. Но кровь это "что-то" не напоминало, поскольку на этом мониторе всё было желтого или черного цвета. Даже без градаций.
Меня очень волновало другое. Все, ну или почти все противники-мечники в игре имеют свой специфический характер боя. Кто-то ждёт атаки и молниеносно контратакует, нужно блокировать удар. Кто-то напористо давит и не даёт опомниться, кто-то так наступает, что без контратаки не выгадать передышку, он осле блока сразу наносит удар.
У меня никогда не было денди, поэтому в играх я не был искушен и мастерством не блистал. Если меня замечали играющим, то непременно находилось какое-то дело для меня, а комп попадал под запрет. Мне дозволялось использовать его только час в сутки, а игра на компьютере была лишь одна, и та часа на четыре без сохранения. Нет, всё же пауза, наверно, останавливала таймер. Как иначе-то?
В общем, на том компе я принца ни разу не прошел дальше 7 или 8 уровня. Потом я эту игру уже запустил на школьных 80386-х в цвете и с более изысканными звуками из PC-спикера. Ну... так казалось.
Однако комп этот послужил мне верой и правдой, и не только мне. Наверно благодаря ему и благодаря такому негативному отношению отца к компьютерным играм я и стал в итоге программистом. Я быстро освоил текстовый редактор "Лексикон", присоединил по распиновке из какой-то библиотечной книжки 9-пиновую мышку к 25-пиновому разъёму проводками. Просто соединил совпадающие одноименные выводы разъёмов. Там, где штырьки, я надевал на них ПВХ-изоляцию проводков обеспечивая контакт с жилками, а там где дырочки - скручивл жилы и долго добивался стабильного контакта.
В итоге шариковая мышка возила курсор в одном из доступных убогих монохросных графических режимов "геркулеса". Я раздобыл на школьных компах и запустил какой-то графический редактор и редактор баннеров с огромными красивыми буквами и кое-каким клипартом. Да, цвета иммитировались густотой черных и желтых точек, но понять где что можно было, а матричный принтер печатал получившееся тоже монохромно. Но можно было же и раскрасить поитом!
Второй брат близнец этого компьютера не без моей подачи уже далось приспособить в конторе у отца. Папа тоже освоил Лексикон и тоже разобрался с принтером, зато мне не было равных в освоении СУБД SyBase. Это что-то вроде позднего MS Access в текстовом режиме, где через сотни менюшек можно было нагородить какие-то формы, интерфейсы, ER-модел, кнопки, поля ввода с надписями и таблицы.
Первым проектом была, помнится, кулинарная книга для мамы. Мне казалось неудобным, что она пользовалась толстой тетрадкой, куда вклеивала вырезки из газет и журналов, писала рецепты от руки. Я целую CRM. про нормализацию я не знал, но, пожалуй, изобрёл её отчасти сам, просто потому что так казалось правильнее. У меня был ментор - друг папы, который работал в типографии и тоже имел дело с компьютерами, но он отвечал мне только и исключительно на вопросы, которые я ему задавал. не всегда я был готов воспринимать такие ответы. но спасибо ему, что не переполнял никогда мне входным потоком сведений способность переваривать информацию и обдумывать её.
Занятно. Недавно с ним разговаривал по телефону. Ну как недавно... в прошлом году.
Ох, что-то заностальгировался я.
Судьба этого компьютера не оказалась печальной. Я передал его в позапрошлом году одному энтузиасту, который собирался его починить. Там что-то с жестким диском. Отправил в новосиб.
Второй комп брат этого долгое время ещё использовался как печатная машинка в местном сельсовете, а работала на нём секретарша главы нашей администрации, по совместительству моя тётя. Деревня небольшая у нас. Я сам, кстати, подал идею вытащить из конторского подвала пылящийся без дела агрегат, сам настраивал ей окружение, лексикон, каталоги документов. показывал как пользоваться техникой. Старенький матричный эпсон (черт его дери, я до сих пор помню его запах!) исправно трудился печатая письма и прочие документы, которые раньше набивали через копирку на печатной машинке.
Кстати, матричный принтер тоже может через копирку печатать! А ещё я помню как ваткой пропитывал специальными чернилами ему чернильную ленту, чтобы не покупать новую, и как заменял в картридже сложенную гармошкой износившуюся ленту на новую от печатной машинки.
Очень много воспоминаний.
Интересно было бы заполучить свои исходники с того помершего винчестера, уехавшего в новосибирск.
Прекрасно помню как мне уже страшно не хватало 20 Мб, как я уплотнял их с помощью DriveSpace, который архивировал файловую систему на лету, как мне жесткий диск гордо показывал 60 Мб объёма, и не слишком врал, поскольку тексты сжимались не плохо, а картинок и музыки на компьютере том не водилось практически.
Я помню, как писал первую игру. Это был какой-то платформер в текстовом режиме, где по уровню из символов псевдографики бегала рожица chr(1), поднималась по лесенкам "H", падала и напарывалась на шипы "^^^" или стрелочки, тонула в воде "~~~" или подвергалась жестокому нападению собак "@" из-за поднятой решетки "#".
Потом я делал свой аналог оконных интерфейсов в текстовом режиме с диалогами, кнопками, полями ввода, выпадающими списками, текстовыми полями, скроллящимися быстро благодаря прерываню BIOS INT 10h, а не мучительно перерисовывающимися посимвольно принтами.
Удавалось даже сделать попиксельное движение мыши в текстовом режиме! Нужно было лишь подменять специальным образом изображение четырёх самых ненужных символов в расширенной таблице ASCII. И надо же, сейчас TUI возвращаются и снова входят в моду!
Возвращаясь мысленно в 90-е невольно диву даёшься огромному контрасту возможностй, которые сейчас открываются. Не было ни интернета, ни даже книг в свободном доступе, а мы как-то учились, как-то разбирались... Что бы тогда можно было наворотить с нынешней нейронкой!
Представляю, если бы меня тогдашнего телепортировать в нынешнее время, или даже наоборот: меня сегодняшнего со знаниями и опытом в те мои 90-е... Ух, аж мурашки...
В таких размышлениях особенно остро ощущаешь насколько удивительное время мы сейчас переживаем. Я такого за свои четыре десятка с плюсами лет никогда не помню, чтобы были такие возможности учиться, что-то делать, творить... я имею в виду в технологическом плане. Любая информация, генеративные модели, интернет, обучающие курсы на любой вкус, архив-орг с научными статьями на халяву, мощные компы о которых в те годы даже не помышлялось! А технологии?! Эх!
Да, я понимаю, что впал в детство=) Я это нарочно. Да, понимаю, что однобоко рассуждаю, понимаю, что не все в одинаковых условиях, что не все имеют мотивацию, не все имеют технический склад ума, не всем в детстве папка приволок комп и вовремя познакомил с очень крутым дядькой - выпускником ХАИ, радиоинженером, который разрабатывал орбитальные антенны. Вообще удивительно, что такого человека занесло к нам в село. Очень многое совпало, да... Но сейчас то возможностей на много порядков больше! Учись, разбирайся - не хочу!
Хочешь - детальки дешевые с алиэкспресс любые. Хочешь - микроволновку с помойки притащи, там магнетрон! Хочешь - достань компрессор из холодильника с той же помойки. Надо лишь подкараулить и снять раньше бомжей, которые его пустят на цветмет. Хочешь - ардуины с ESP32 или RPi не такие уж и дорогие, камеры, карты памяти, модули, сенсоры... КУЧА статей и мануалов, куча лекций в доступности, куча видосов про коллайдер или синхрофазотрон для чайников. А его величество агентный Claude всего лишь за 20 баксов? А ЧатЖПТ - по сути бесконечно терпеливый и, в общем, бесплатный ментор, которому можно задвать любые даже самые глупые вопросы. Он ответит серьёзно, полезно, широко и понятно. Такого не было НИ-КОГ-ДА!
Ух. Че-то я раздухарился. Надо померять температуру моей биологической нейронки, которая накатала весь этот ностальгический опус.
За возможные опечатки, анахронизмы и орфографические ошибки не обессудьте. Думаю смысл я донёс, а что ещё надо? Это ж не мемуары...























