[Системное администрирование, Assembler, Сжатие данных, Разработка под Windows, История IT] Windows 95 на двух флоппиках

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
04-Ноя-2020 20:32

В этом году мы отпраздновали четверть века с Windows 95. Её минимальная установка занимала 30 МБ; народные умельцы ужимали её до 5 МБ после удаления всех «лишних» файлов и сжатия UPX-ом оставшихся. А как насчёт двух флоппиков по 1.44 МБ, вместе с загрузчиком?

Общий подход я уже описывал в комментариях: создаётся RAMDRIVE, и на него разворачивается двухтомный SFX-архив. Но есть много тонкостей:
  • Как видно на видео выше, распакованная папка Windows у меня занимает 6.2 МБ. Я взял за основу список файлов Micro95, и дополнительно удалил файлы, оказавшиеся необязательными — например, шрифты и драйвер dosnet.vxd. Кроме того, vmm32.vxd я распаковал, и удалил бывшие внутри него необязательные драйвера.
    Можно было уменьшить Windows ещё сильнее, пересобрав vmm32.vxd после удаления необязательных драйверов (освобождается почти мегабайт, но сжимается такой vmm32.vxd хуже, чем распакованные VXD), заменив оболочку на классический «Диспетчер программ» (освобождается целый мегабайт за счёт explorer.exe и shell32.dll), и/или отказавшись от поддержки командной строки (освобождается 155 КБ за счёт pifmgr.dll, vgafull.3gr, winoa386.mod); но я решил, что без этих компонентов Windows 95 становится полностью бесполезной.
    Со всем этим, на втором флоппике у меня оставались ещё 247 свободных КБ, так что я смог добавить к минимальному набору файлов ещё «Блокнот» и три аплета «Панели управления»; даже и с ними один килобайт на флоппике остался незанятым :-)
    Fun fact: среди оставшихся файлов поровну (по 19) 16-битных NE и 32-битных PE, подтверждая байку о том, что Windows 95 была 32-битной ровно наполовину.
  • Проект Micro95 публиковал минимальное содержимое system.ini, win.ini, и реестра. К ним я тоже подошёл творчески: в system.ini на самом деле достаточно двух строк
    [386Enh]
    mouse=*vmouse
    Существование win.ini необязательно; а с предложенным ими вариантом реестра перестают работать ярлыки, Корзина и Панель управления, так что реестр я урезал менее агрессивно.
  • Для сжатия Windows лучше всего подошёл WinAce: уровень сжатия у него почти такой же, как у WinRAR, но SFX-модуль для DOS меньше на 32 КБ, и его можно уменьшить ещё на килобайт, пережав UPX-ом c ключом --ultra-brute. Ещё 31 КБ удалось выиграть, сжав UPX-ом драйвера himem.sys, ramdrive.sys, ifshlp.sys
  • Для того, чтобы работали ярлыки (в т.ч. «Перезагрузка в режиме MS-DOS»), при распаковке Windows должны воссоздаваться длинные имена файлов (LFN). SFX-модули делают это при помощи LFN API, который доступен в MS-DOS 7+ только после загрузки графической среды Windows. Я нашёл опенсорсный драйвер DOSLFN, заброшенный в 2012; к сожалению, под версией DOS, родной для Windows 95, он не работал из-за бага: наличие в DOS поддержки FAT32 определялось некорректно, так что в Windows 95 он думал, что поддержка есть, пытался ей пользоваться, и терпел неудачу. (В DOS 6.x и более старых, а также в Windows 95 OSR2 и более новых, драйвер работал корректно.) Для того, чтобы исправить этот баг, достаточно было закомментировать в исходнике две строчки:
    ;== 6. Determine the presence of the FAT32 API ==
      mov  ax,7302h  ;extended get DPB
      mov  dl,0    ;current drive
      mov  cx,3fh    ;length of buffer
      mov  di,ofs truename_buf;buffer
      stc      ;for pre-DOS7
      int  21h
      jnc  @@ext
    ; On Win95 4.00.950, it always fails with AX=1
    ;  cmp  ax,7300h  ;did it fail because there's no such call?
    ;  jne  @@ext    ;no, it didn't like the drive
    Раз мне всё равно пришлось перекомпилировать DOSLFN, я заодно расставил по всему коду условную компиляцию, чтобы получить возможность уменьшить файл в полтора раза, отключив ненужные мне возможности — переключение языков сообщений, поддержку Unicode, и поддержку CD-ROM. Пропатченный исходник я положил на tyomitch.github.io/doslfn.asm; все мои изменения можно увидеть на github.com/tyomitch/tyomitch.github.io/commit/ad8a2

Поскольку Windows 95 в 2018 была передана в общественное достояние, то я не нарушаю ничьи авторские права, публикуя образы двух моих флоппиков:

===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_sistemnoe_administrirovanie (Системное администрирование), #_assembler, #_szhatie_dannyh (Сжатие данных), #_razrabotka_pod_windows (Разработка под Windows), #_istorija_it (История IT), #_windows_95, #_micro95, #_vmm32, #_ramdrive, #_winace, #_doslfn, #_sistemnoe_administrirovanie (
Системное администрирование
)
, #_assembler, #_szhatie_dannyh (
Сжатие данных
)
, #_razrabotka_pod_windows (
Разработка под Windows
)
, #_istorija_it (
История IT
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 20:03
Часовой пояс: UTC + 5