По собствените му думи YouTube ентусиастът MattKC е прехвърлил "хиляди приложения" към Windows 95, като е портнал и най-значимата функция на Windows 98 - .NET Framework - обратно към старата версия 95. В крайна сметка основното ограничение на Windows 95 в сравнение с 98 е липсата на .NET Framework - в повечето други отношения Windows 98 е удивително близък до своя предшественик по дизайн и функции. Но защо е направил това?
51-минутният видеоклип разкрива най-вече искрен ентусиазъм към онази епоха на хардуера и софтуера, както човек би си представил, ако е искал да направи филм за разширяването на Windows 95 28 години след пускането му на пазара. Оригиналният клип, вграден по-долу, има и няколко забавни живи допирни точки, които задават тона и характера, включително няколко красиво заснети антракта.
KernelEx не работи на Windows 95; MattKC трябва да открие как да накара .NET Framework да работи правилно. Липсващите .DLL файлове изобилстват, но използването на инструмент за дъмпинг позволява да се идентифицират имената на липсващите файлове, така че липсващият DLL да бъде заменен или игнориран. Дори след пренасянето на всички липсващи DLL файлове .NET все още не дава резултат.
За да работи .NET в Windows 95, са необходими повече ключове от регистъра, отколкото са секундите в оригиналния 51 минути и 53 секунди видеоклип - общият брой на необходимите ключове от регистъра е 5409.
Но дори след като е пренесен, .NET не може да се дебъгва правилно JIT (Just In Time) в Windows 95. Причината изглежда е ndphlpr, мистериозен наследен драйвер на Windows, неизползван в Windows 98, но "необходим" за .NET, тъй като .NET се срива без него. MattKC определя, че лъжата на компютъра, че има ndphlpr, може да проработи, но след като проучването разкрива, че никой не знае какво представлява, той се опитва да го поправи изцяло.
Това изписва грешка за изключение на машинния код. Инструментът WinDebug не поддържа .NET в естествен вид (тъй като все още не се предполага, че съществува), така че MattKC все още трябва да се справя с някои проблеми със съвместимостта, докато тества Windows 95 и 98 паралелно. W95 и W98 бяха стартирани с WinDebug в продължение на дни, за да се открие проблемът, а нулирането на напредъка беше мъчително.
В крайна сметка MattKC откри блокиран блок от код, който WinDebug не можеше да прочете. След дешифрирането кодът беше разкрит като:
F2 0F 10 44 24 08 F2 05 2C CO
Този грешен код се отнася до липсващ API на Windows за някои функции за щракване. Изключението се състоеше в това, че не можеше да се намери NotifyWinEvent в user32.dll и SSE2 закри една инструкция в кода. След това се наложи да се коригира .NET, за да се премахне зависимостта от SSE2 - но това не поправи съвместимостта, а само самия дебъгер на .NET.
След много повече дебъгване за Lego Island MattKC в крайна сметка ръчно кодира метод за отпечатване на съобщението за изключение/грешка в прозорец, вместо да се случва там, където той не може да го види. Това работи и позволява да се изглади последната част от съвместимостта с DLL. След това програмата Rebuilder за Lego Island и персонализираното, по-модернизирано приложение с функция за правене на снимки на екрана вече работят добре под Windows 95.
Снимка: Unsplash/MattKC on YouTube
Виж още: Този хибриден самолетен дизайн може да направи полетите по-евтини от билетче в трамвая