هذا المشروع هو محاكي DOS الذي يستخدم واجهة برمجة تطبيقات Windows Hypervisor (WHP) لإنشاء وحدة المعالجة المركزية الافتراضية ، مما يتيح تنفيذ برامج DOS ضمن بيئة حقيقية 16 بت على أنظمة Windows الحديثة.
في محاكي Windows 3.1 السابق ، تم محاكاة وحدة المعالجة المركزية 80286 بالكامل في البرنامج. ومع ذلك ، في هذا المشروع ، قررت اتباع نهج مختلف باستخدام المحاكاة الافتراضية للأجهزة لوحدة المعالجة المركزية مع محاكاة طبقة DOS فقط في البرنامج.
يعمل هذا المحاكي في المقام الأول كإظهار لـ WHP API ولا يهدف إلى العمل كمحاكي DOS كامل. تم تنفيذ الحد الأدنى من وظائف DOS ، بما يكفي فقط لتشغيل بعض البرامج العينة ، على الرغم من أن الإطار قد تم تصميمه ليكون قابلاً للتمديد بسهولة.
يقوم المحاكي بتهيئة وحدة المعالجة المركزية الافتراضية باستخدام واجهة برمجة تطبيقات WHP ، وتكوينها لتشغيلها في الوضع الحقيقي من خلال التأكد من تعطيل بتات PE (تمكين الوضع المحمي) و PG (الترحيل) في سجل CR0.
يتم تعيين DOS القابلة للتنفيذ في مضيف المحاكي ومشاركته مع الضيف على العنوان الفعلي المناسب ، ومحاكاة تخطيط الذاكرة لنظام DOS الحقيقي.
تحدث معظم وظائف DOS عبر المقاطعات ، مثل 0x21 لخدمات النظام و 0x10 لعمليات الفيديو ، والتي يجب محاكاةها يدويًا في البرامج. لا تؤدي المقاطعات بطبيعتها إلى خروج VM ، وتتطلب حيلًا إضافية لالتقاطها. تتم معالجة هذا بسهولة عن طريق تطبيق جدول متجهات المقاطعة المخصص (IVT) حيث تشير كل مقاطعة إلى تعليمات وحدة المعالجة المركزية. يضمن هذا التكوين أن يتم تشغيل مخرج VM عند حدوث مقاطعة ، مما يتيح للمحاكي اعتراض المقاطعة والتعامل معها.
غالبًا ما تستفيد برامج DOS من منافذ الإدخال/الإخراج ، مثل مكبرات الصوت ، CMOs ، وأجهزة توقيت الأجهزة. يتم التقاط طلبات الإدخال/الإخراج بسهولة لأن الإرشادات in
out
تؤدي إلى خروج VM ، مما يسمح بمحاكاة الوظائف. حاليًا ، يتم دعم مجموعة صغيرة جدًا من طلبات الإدخال/الإخراج الشائعة.
تستخدم برامج DOS طرقًا مختلفة للحفاظ على التوقيت. يتضمن هذا المحاكي دعمًا لبعض هذه الآليات:
0000:046C
، وهو بديل للوصول إلى الذاكرة مباشرة.لم يتم تنفيذ مؤقت PIT 8253 بالكامل في هذا الوقت.
يراقب المحاكي حالة لوحة المفاتيح ويحافظ على مخزن مفتاح بسيط ، ويمرر المعلومات إلى برنامج DOS عبر مقاطعات لوحة المفاتيح (0x16) حسب الضرورة.
يتم دعم أوامر الطرفية الأساسية ، مما يسمح للمحاكي بتشغيل الألعاب البسيطة القائمة على النصوص والبرامج الأساسية الأخرى.
يخصص المحاكي حاليًا مساحة لحقول النظام ، مثل مناطق بيانات BIOS وبادئة قطاع البرنامج (PSP). ومع ذلك ، فإن هذه الحقول غير مأهولة حاليًا ، باستثناء قيمة عداد BIOS. يمكن ملء حقول إضافية حسب الضرورة.
تم إجراء الاختبار باستخدام لعبة DOS بسيطة من Flareon 2023 (Flaresay.exe ، التحدي رقم 6) ، لأنه كان DOS الوحيد القابل للتنفيذ على القرص الصلب في ذلك الوقت.
بالإضافة إلى محاكي DOS هذا ، حققت بعض النجاح من خلال مفهوم مماثل يهدف إلى محاكاة برامج مستخدم Windows 64 بت/32 بت. من خلال بناء بيئة CPL3 المحاكاة وتثبيت سجل MSR_LSTAR ، من الممكن محاكاة مخرجات قابلة للتنفيذ وإجبار مخرج VM على مكالمات النظام. يتيح هذا للمحاكي التقاط وإعادة توجيه طلب استدعاء النظام إلى نظام التشغيل المضيف أو اعتراضه. تأتي هذه التقنية مع العديد من المضاعفات ، ولكن قد تكون هناك حالات استخدام صالحة حيث يمكن أن يكون المحاكي خفيف الوزن مفيدًا.