В этом году мы отпраздновали четверть века с Windows 95. Её минимальная установка занимала 30 МБ; народные умельцы ужимали её до 5 МБ после удаления всех «лишних» файлов и сжатия UPX-ом оставшихся. А как насчёт двух флоппиков по 1.44 МБ, вместе с загрузчиком?
Общий подход я уже описывал в комментариях: создаётся RAMDRIVE, и на него разворачивается двухтомный SFX-архив. Но есть много тонкостей:
Можно было уменьшить 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-битной ровно наполовину.
mouse=*vmouseСуществование win.ini необязательно; а с предложенным ими вариантом реестра перестают работать ярлыки, Корзина и Панель управления, так что реестр я урезал менее агрессивно.
;== 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 была передана в общественное достояние, то я не нарушаю ничьи авторские права, публикуя образы двух моих флоппиков: