Down To Fuck: Soft & Hardcore

​Hello World Иван 'preqursor' Долгих
​Hello World Иван 'preqursor' Долгих

Привет DTF! Хочу поведать вам свою небольшую историю «любви».

Предыстория

Ностальгия из меня прям так и прет: люблю я вспомнить счастливое детство, поэтому на моих устройствах всегда есть всяческие эмуляторы старых консолей, виртуальные машины или сборки каких-нибудь старых игр, которые, пусть и с лютыми костылями, но возможно запустить на современных системах в каком-либо виде. Но эмуляторы-эмуляторами, а хочется чего-то более аутентичного. Поэтому я загорелся идеей собрать себе ретро машинку для всяких старых игрушек, чтобы не возиться с виртуалками и DosBox.

В 1998 году, у моего друга и одноклассника появился прекрасный диск (в 1990-е годы в нашей провинции ничего кроме пираток и не было). Если мысленно выкинуть из него все паззлы и карточные игры, то мы имеем великолепную подборку игр тех времен. Спасибо тому человеку, кто составил этот сборник! Жемчужиной этой коллекции оказалась GTA — я чуть не тронулся, когда ее впервые увидел. Из-за нее я часто огребал от родителей — не из-за жестокости и всей той преступной тематики, а по причине того что проводил за компьютером гораздо больше разрешенного мне времени :) .

Несколько лет назад я вспомнил про игру с того диска: ярко-выраженный-клон Quake под названием Chasm: The Rift от украинских разработчиков Action Forms. Игра довольна занимательная: 2,5D-шутер (но все модели в честном 3D, никаких спрайтов!) в котором врагам можно отстреливать конечности. На моем предыдущем компьютере в DosBox игра шла очень неровно в разрешении 640х480, а играть в 320х240 на жидкокристаллическом мониторе то еще удовольствие.

Обзор Дмитрия Моисеева

Страдать от плохой эмуляции и мыла на экране мне надоело и я принял решение: пора что-то собирать! Вспомнил что у двоюродного брата пылится на полке его первый компьютер, который ему покупали в начале 2000х, и 17" ЭЛТ-монитор Samsung Samtron 76E — очень ходовая модель в то время. Договорился, забрал системник и моник, накатил Windows 98, прошел Chasm. Гештальт закрыт! Но на этом я не успокоился, а лишь только раздразнил себя...

Понимая что бороться со своей странной необходимостью в сборе своего ретро-системника у меня не получится, я начал обзванивать местных барахольщиков, просматривать газеты и сайты с объявлениями в надежде найти что-то уровня Pentium II или Pentium III. Конечно же ничего, кроме странных взглядов, в нашем уездном городе я не нашел. Максимум что мне светило Celeron или Pentium 4 поколения Northwood с поддержкой Hyper-Threading, да всякие Athlon XP, так что об аутентичном железе можно было забыть. Все раритеты либо под кучей хлама на закрытых складах предприятий, либо давно разлагаются на свалках загрязняя окружающую среду. Тратить много времени и денег выискивая и покупая железо у энтузиастов из других регионов или возиться с доставкой мне не хотелось, поэтому я успокоился на некоторое время....

Компромисс

....пока однажды не оказался на таком складе. Среди шкафов, столов и прочей утвари я обнаружил кучу списанной техники, подлежащей утилизации: принтеры, сканеры, толстые ЖК-мониторы первых поколений, ЭЛТ-мониторы, разные системные блоки, все примерно начала двухтысячных. Под плотным слоем пыли и грязи я разглядел несколько интересных экземпляров: рабочие станции IBM Thinkcentre, корпуса в вертикальном и горизонтальном исполнении. Те что вертикальные явно стояли на полу, поэтому годы их не пощадили: краска местами облезла, пластик потрескался, у некоторых сколоты углы передней панели, видны следы обуви на боковых стенках - страшно смотреть. Горизонтальные корпуса вызвали особый интерес - выглядели они гораздо лучше, т.к. стояли на столах, а не на полу и побоев перенесли поменьше. Поинтересовался о их жизнеспособности, но ответа на этот вопрос не знал никто, т.к. пылились они там уже не первый год. В общем выпросил разрешения посмотреть, включить, проверить.

Большинство не стартовало: умерли блоки питания, в некоторых не было комплектующих (видимо ушли на замену по соседним рабочим станциям или еще куда), в каких-то умерли чипсеты или вздулись конденсаторы. Худо-бедно собрал один рабочий системный блок:

  • взял самый хорошо сохранившийся горизонтальный корпус (чтоб как у оригинальных IBM PC/AT, да и выглядит круто);
  • снял мать с вертикального донора (только на таких экземплярах был AGP слот под видеокарту на материнской плате), но оставил родной процессор (я точно знал что, допустим, Chasm: The Rift не запустится на процессоре с частотой 3.0 GHz - как у донора, но пойдет на процессоре с частотой 2.8 GHz - на родном от этой модели), в моем случае - чем хуже - тем лучше :) ;
  • докинул еще одну плашку памяти (итого 2 х 256 Mb - максимум что может выдержать Windows 9x из коробки и без костылей);
  • методом перебора нашел рабочий CD-ROM (по какой-то причине почти все умерли, был еще один комбо CD-RW/DVD-ROM, но он читал через раз, да и это уже слишком).
Слева: донорский Pentium 4 с частотой 3 GHz, 1M​b L2-кэша, 800 MHz шиной, 2004 г.в. Справа: родной Pentium 4 с частотой 2,8 GHz, 1Mb L2-кэша, 533 MHz шиной, 2003 г.в. В основе обоих процессоров лежит ядро Prescott и разъем Socket 478.
Слева: донорский Pentium 4 с частотой 3 GHz, 1M​b L2-кэша, 800 MHz шиной, 2004 г.в. Справа: родной Pentium 4 с частотой 2,8 GHz, 1Mb L2-кэша, 533 MHz шиной, 2003 г.в. В основе обоих процессоров лежит ядро Prescott и разъем Socket 478.

Монстр Франкенштейна

IBM ThinkCentre A50 8177 - это один из последних "настоящих" IBM PC 2004 года выпуска, произведенный примерно за год до продажи IBM своего бизнеса по производству ПК и ноутбуков китайцам из Lenovo. Да, я понимаю, что все сделано в китае, но шильдик "голубого гиганта" на корпусе греет душу и вызывает гордость.

Отмывал и продувал я его не жалея сил. Итак, вот что у меня получилось:

  • CPU: Pentium 4 Prescott 2,8 GHz 533 MHz FSB Socket 478
  • RAM: 512 Mb DDR SDRAM 333 MHz Dual
  • GPU: Intel Extreme Graphics 2 (до 32Mb Shared RAM)
  • Audio: Analog Devices SoundMAX AC'97
  • HDD: Seagate 40 Gb 7200 RPM
  • FDD: NEC 3.5″ Drive
  • ODD: Hitachi-LG 48x CD-ROM
  • NET: Intel PRO/100 VE

Интерфейсы:

  • 2 х PS/2 для клавиатуры и мыши
  • Параллельный порт
  • Последовательный порт
  • VGA порт для интегрированного видео Intel 865G
  • Mic, Line-In, Line-Out для интегрированного аудио AC'97
  • Ethernet порт 100Mbit
  • 4 х USB 2.0 сзади \ 2 х USB 2.0 спереди

Это практически максимум того что может потянуть старушка Windows 98 (на самом деле нет, но и этого более чем достаточно).

We need to go deeper

Под виндой дело шло неплохо, до поры, до времени. Чем больше игр я запускал, тем больше понимал - все только начинается. Интегрированное аудио не SoundBlaster-совместимо, а интегрированное видео поддерживает не все VESA-режимы (например, разрешение 640х400). Это значит что в играх поздней DOS эпохи совершенно нет звука, а в некоторых и изображения (или настолько сильные артефакты, что ничего не разобрать, а некоторые игры, например GTA, не запускаются совсем). Такое положение вещей меня совершенно не устраивало, да и в целом сводило на нет все эти мои выкрутасы, причиняя мне невероятные душевные муки :'( .

Вспоминаю железо которое было у меня (ок, в компьютере моего отца) в начале 2000-х: Pentium III 1 GHz, GeForce 2 GTS от Asus (со стерео очками!), SoundBlaster Live 5.1. Ладно, поехали: знаю где достать GeForce 4 MX 440 8X AGP (по факту это GeForce 2, очень хороший по характеристикам, легко может пободаться с топовой Ultra-версией), "Лайвов" в те года тоже было просто завались. Иду на "авито" и покупаю отличную звуковую карту за 200 рублей :) . Ну хоть в чем-то повезло.

Устанавливаю драйверы. Видео: Detonator 45.23 - лучшее соотношение производительность\совместимость (NVidia даунгрейдила карты драйверами еще до того как некоторые из вас появились на свет!). Аудио: SB Live VxD драйвер (в комплекте еще идет более современный WDM драйвер, но он не дает хорошей совместимости с эмуляцией SoundBlaster 16 для DOS игр), а также DOS драйвер.

Настраиваю игры, запускаю: есть картинка, есть звук! Но где, блин, музыка с компакт-диска? Понимаю что коннектор под названием CD-IN не спроста присутствует на звуковой карте. Пришлось найти кабель для передачи аналогового звука с привода CD-ROM напрямую в звуковуху. Проблем не возникло, музыка заиграла. Слава Компьютерному Богу (и Задротскому тоже, что уж там)!

4-Pin MPC2 Optical Drive CD-ROM Internal Audio Cable​
4-Pin MPC2 Optical Drive CD-ROM Internal Audio Cable​

Dirty Old Sucker

Еще у меня есть такой пунктик: если у игры есть DOS-версия, значит она непременно должна запускаться из-под чистого DOS. Раз уж я не смог сделать все аутентично по железной части, значит нужно постараться навести красоту по части программной!

Попадаем в чистый DOS

Для начала, я хочу попасть в чистый DOS, тот самый, что загружается до старта Windows. Чтобы это сделать нужно нажать клавишу F8 до начала загрузки операционной системы - на экране появится загрузочное меню Windows 98. Но я не хочу ловить момент при каждом включении или перезагрузке! Придется прописать параметр BootMenu=1 в msdos.sys.

Содержимое msdos.sys:

[Paths] WinDir=C:\WINDOWS WinBootDir=C:\WINDOWS HostWinBootDrv=C [Options] BootMenu=1 ;то, что нужно! BootMulti=1 BootGUI=1 DoubleBuffer=1 AutoScan=1 WinVer=4.10.2222 ; ;The following lines are required for compatibility with other programs. ;Do not remove them (MSDOS.SYS needs to be >1024 bytes). ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxd ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxe ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxh ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxj ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxk ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxl ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxm ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxn ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxo ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxp ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxq ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxs

Теперь при каждом включении компьютера нас будет встречать такой экран:

Загрузочное меню Windows 98
Загрузочное меню Windows 98

Теперь мы можем и в дос попасть, выбрав пункт 5. Command prompt only, и в безопасный режим загрузиться, если что-то пойдет не так. Удобно!

Все бы хорошо, но теперь нужно решить еще несколько задач:

  1. Нет звука (да, опять!).
  2. Нет поддержки мыши (неужели придется "тракторить" в шутерах на стрелках?!).
  3. Нет поддержки CD-ROM из коробки (игру не поставить, музыку в игре не послушать!).

Пройдемся по основным конфигурационным файлам, дабы научить дос загружать драйверы необходимого нам оборудования. Однако важно помнить, что под чистым досом каждый килобайт памяти на счету. Некоторые старые игры могут загружаться только в основную память (Conventional memory - это та, которой всего 640 килобайт!). Например, Cannon Fodder: мало того что игра сама по себе вынесет мозги, так еще и запустить ее - целый ритуал. Для того чтобы была возможность сыграть в нее, нам требуется 567536 байт свободной оперативной памяти.

Смотрим использование памяти "голой" системой (команда mem /c).

Модули, использующие адреса памяти ниже 1 МБ: Имя Размер Обычная память Верхняя память -------- ---------------- ---------------- ---------------- MSDOS 18 272 (18K) 18 272 (18K) 0 (0K) DISPLAY 18 064 (18K) 18 064 (18K) 0 (0K) HIMEM 1 120 (1K) 1 120 (1K) 0 (0K) DBLBUFF 2 976 (3K) 2 976 (3K) 0 (0K) IFSHLP 2 864 (3K) 2 864 (3K) 0 (0K) COMMAND 7 328 (7K) 7 328 (7K) 0 (0K) KEYB 6 944 (7K) 6 944 (7K) 0 (0K) Свободно 597 648 (584K) 597 648 (584K) 0 (0K) Сведения о памяти: Тип памяти Размер Занято Свободно ---------------- ----------- ----------- ----------- Обычная 655 360 57 712 597 648 Верхняя 0 0 0 Зарезервировано 393 216 393 216 0 Память XMS 133 169 152 69 632 133 099 520 ---------------- ----------- ----------- ----------- Всего памяти: 134 217 728 520 560 133 697 168 Ниже 1 МБ: 655 360 57 712 597 648 Максимально допустимый размер программы: 597 520 (584K) Наибольший свободный блок верхней памяти: 0 (0K) Резидентная часть MS-DOS загружена в сегмент HMA.

Сейчас памяти для запуска игры хватает, но нам нужен драйвер мыши (которого, кстати, нет в комплекте с ОС) и звуковой драйвер. А вообще, в идеале, я не хочу городить забор из вариантов запуска операционной системы под каждую такую хитровыделанную игру, мне нужна универсальная сборка: мышь, привод, звук, да чтоб памяти побольше!

Из того что система уже загружает сама убирать ничего нельзя - я не хочу лишаться поддержки кириллицы или возможности в любой момент загрузиться в Windows без перезагрузки компьютера (для этого просто набираем win в командной строке и через несколько секунд видим рабочий стол винды и прочие прелести графического интерфейса). Нужно научить DOS загружать себя в High Memory Area (небольшой участок памяти свыше 1 мегабайта), а драйверы в Upper Memory Blocks (память в промежутке от 640 килобайт до 1 мегабайта). Костыли, на которых живет вся архитектура x86, но... такова жизнь.

Освобождаем память

Содержимое config.sys (свои комментарии даю через двойной слэш):

DOS=HIGH,UMB // загружаем дос в HMA DEVICE=C:\DOSDRV\HIMEMX.EXE // используем менеджер верхней памяти из freedos, так хорошо DEVICE=C:\WINDOWS\EMM386.EXE NOEMS // в сочетании с параметром NOEMS драйверы, наконец, смогут загружаться в UMB при использовании команды DEVICEHIGH DEVICEHIGH=C:\WINDOWS\COMMAND\display.sys con=(ega,,1) // поддержка кириллицы, если не хочется видеть "кракозябры" Country=007,866,C:\WINDOWS\COMMAND\country.sys // локализация (формат отображения времени и даты, денежных единиц, сортировки и т.д.) DEVICEHIGH=C:\DOSDRV\VIDE-CDD.SYS /D:MSCD001 /P:170,15 // кастомный драйвер cd-rom, весит всего 23 килобайта, вместо 41 килобайта, что идет в комплекте с загрузочной дискетой винды LASTDRIVEHIGH=Z // указываем последнюю букву, которую можно присвоить какому-либо диску

Содержимое autoexec.bat:

mode con codepage prepare=((866) C:\WINDOWS\COMMAND\ega3.cpi) // подготовка mode con codepage select=866 // и установка альтернативная кодировки ГОСТ для отображения кириллических символов LOADHIGH=keyb ru,,C:\WINDOWS\COMMAND\keybrd3.sys // грузим в верхнюю память драйвер клавиатуры с возможностью переключения и ввода кириллицы LOADHIGH=C:\DOSDRV\SHSUCDX.COM /D:MSCD001 // туда же резидентную программу, которая подцепляет привод через ранее загруженный драйвер, занимает в памяти всего 6 килобайт, против "родной" которая весит 25 килобайт (охренеть разница!) LOADHIGH=C:\DOSDRV\CTMOUSE.EXE // лучший драйвер мыши из freedos, мало весит SET BLASTER=A220 I7 D3 H7 P330 E620 T6 // задаем прерывания для звуковой карты и прописываем используемые порты SET CTSYN=C:\DOSDRV // задаем переменную, необходимую для работы драйвера звуковой карты LOADHIGH=C:\DOSDRV\SBEINIT.COM // наконец, подгружаем в верхнюю память сам драйвер эмуляции SoundBlaster 16, т.е. заводим звук под чистым досом

Вот что показывает mem /c после проведенных оптимизаций:

Модули, использующие адреса памяти ниже 1 МБ: Имя Размер Обычная память Верхняя память -------- ---------------- ---------------- ---------------- SYSTEM 28 016 (27K) 9 568 (9K) 18 448 (18K) HIMEMX 2 128 (2K) 2 128 (2K) 0 (0K) EMM386 4 256 (4K) 4 256 (4K) 0 (0K) DBLBUFF 2 976 (3K) 2 976 (3K) 0 (0K) COMMAND 10 064 (10K) 1 440 (1K) 8 624 (8K) KEYB 6 944 (7K) 6 944 (7K) 0 (0K) SHSUCDX 6 224 (6K) 6 224 (6K) 0 (0K) CTMOUSE 3 104 (3K) 3 104 (3K) 0 (0K) SBEINIT 4 736 (5K) 4 736 (5K) 0 (0K) DISPLAY 8 304 (8K) 0 (0K) 8 304 (8K) VIDE-CDD 20 496 (20K) 0 (0K) 20 496 (20K) IFSHLP 2 864 (3K) 0 (0K) 2 864 (3K) Свободно 612 928 (599K) 611 712 (597K) 1 216 (1K) Сведения о памяти: Тип памяти Размер Занято Свободно ---------------- ----------- ----------- ----------- Обычная 653 312 41 600 611 712 Верхняя 59 952 58 736 1 216 Зарезервировано 0 0 0 Память XMS 66 000 336 ? 531 475 456 ---------------- ----------- ----------- ----------- Всего памяти: 66 713 600 ? 532 088 384 Ниже 1 МБ: 713 264 100 336 612 928 Максимально допустимый размер программы: 611 616 (597K) Наибольший свободный блок верхней памяти: 672 (1K) Резидентная часть MS-DOS загружена в сегмент HMA.

Последствия

Ура! "Верхняя" память занята, а свободной "обычной" стало даже больше чем было до этого. Вот теперь можно и поиграть! Хотя уже, что-то и не охота... Заставить игру работать гораздо интереснее, чем играть в нее.

Возвращаясь к теме звука: в Cannon Fodder или Disney's Alladdin SoundBlaster-совместимая карта будет выдавать звук только если она на шине ISA, а это совсем редкость, так что со своей SB Live! на шине PCI мне светит только пиликание через эмуляцию AdLib, которое к счастью поддерживается.

Под чистым DOS я прошел первый Quake со всеми аддонами (впервые) на Nightmare, в 320х240, с мышью и саундтреком от Nine Inch Nails. И это было просто офигенно! Замечательная игра, на этой сложности раскрывается совсем с другой стороны. Рекомендую! Сейчас перепрохожу Duke Nukem 3D. А под виндой, наконец-то прошел режим Factory Driver в Need For Speeed: Porsche Unleashed. Кажется теперь у меня реальные проблемы с бэклогом...

Ниже немного снимков экрана (буквально, ха-ха).

105105
25 комментариев

На что я трачу свою жизнь...

27

Не ты один...  Я для максимальной аутентичности, дабы игралось "как тогда" собрал аж  две - схожую с твоей на 478-м сокете, для DOSа и win98; и на 775-м с ХРюшей вторая рядом)
Думал я один такой приболевший.

9

Комментарий недоступен

1

аж олдскулы свело

17

Это порноподсайт ?

5

It's bondage, gay website

11

Комментарий недоступен

3