Peanut-GB عبارة عن مكتبة محاكي Game Boy ذات رأس ملف واحد تعتمد على محاكي gameboy هذا. الهدف هو إنشاء مكتبة محاكيات Game Boy (DMG) عالية السرعة ومحمولة يمكن استخدامها لأي منصة تحتوي على مترجم C99.
هذا المحاكي سريع جدًا . لدرجة أنه يمكن تشغيله بأقصى سرعة على Raspberry Pi Pico! قم بزيارة BENCHMARK.md للتعرف على معايير Peanut-GB.
يتم دعم لعبة Game Boy (DMG) الأصلية فقط في هذا الوقت، ولكن تم الانتهاء من العمل الأولي لدعم Game Boy Color (انظر رقم 50).
هذا المحاكي قيد التنفيذ ويمكن أن يكون غير دقيق (على الرغم من أنه يجتاز تعليمات وحدة المعالجة المركزية الخاصة بـ Blargg واختبارات توقيت التعليمات). على هذا النحو، قد تعمل بعض الألعاب بشكل غير صحيح أو لا تعمل على الإطلاق. يرجى البحث عن محاكي بديل إذا كانت الدقة مهمة.
يتم تقديم المثال الرئيسي للتنفيذ في Peanut_sdl.c، والذي يستخدم SDL2 لرسم الشاشة وأخذ المدخلات. قم بتشغيل cmake
أو make
في المجلد ./examples/sdl2/ لتجميعه.
قم بتشغيل peanut-sdl
، مما يؤدي إلى إنشاء نافذة منطقة إسقاط يمكنك سحب وإسقاط ملف ROM فيها. بدلًا من ذلك، يمكنك تشغيله في الوحدة الطرفية باستخدام peanut-sdl game.gb
، والذي سيقوم تلقائيًا بإنشاء ملف الحفظ game.sav
للعبة إذا لم يتم العثور عليه. أو قم بتشغيل peanut-sdl game.gb save.sav
لتحديد ملف حفظ.
ملاحظة: تقتصر صور GIF المتحركة المعروضة هنا على 50 إطارًا في الثانية، بينما كانت المحاكاة تعمل بمعدل 60 إطارًا في الثانية الأصلي. وذلك لأن أجهزة فك ترميز GIF الشائعة تحدد الحد الأقصى لعدد الإطارات في الثانية بـ 50.
فعل | لوحة المفاتيح | جويباد |
---|---|---|
أ | ض | أ |
ب | س | ب |
يبدأ | يعود | يبدأ |
يختار | مسافة للخلف | خلف |
مد الوسادة | مفاتيح الأسهم | ديباد |
كرر أ | أ | |
كرر ب | ق | |
السرعة العادية | 1 | |
توربو ×2 (عقد) | فضاء | |
توربو X2 (تبديل) | 2 | |
توربو X3 (تبديل) | 3 | |
توربو X4 (تبديل) | 4 | |
إعادة ضبط | ص | |
تغيير اللوحة | ص | |
إعادة ضبط اللوحة | التحول + ص | |
ملء الشاشة | F11 / و | |
تخطي الإطارات (تبديل) | س | |
تشبيك (تبديل) | أنا | |
تفريغ BMP (تبديل) | ب |
يتم إيقاف تشغيل وضعي Frameskip وInterlaced بشكل افتراضي. يقوم Frameskip بالتبديل بين 60 إطارًا في الثانية و30 إطارًا في الثانية.
سيؤدي الضغط على "b" إلى تفريغ كل إطار كملف صورة نقطية 24 بت في المجلد الحالي. راجع /screencaps/README.md لمزيد من المعلومات.
في أي ترتيب معين، وقائمة غير حصرية، تستخدم المشاريع التالية Peanut-GB.
يمكن العثور على وثائق النماذج الأولية للوظائف في أسفل Peanut_gb.h.
يجب أن يوفر تطبيق الواجهة الأمامية عددًا من الوظائف للمكتبة. يتم تعيين هذه الوظائف عند استدعاء gb_init.
يمكن تحديد الوظائف الاختيارية التالية لمزيد من الوظائف.
هذه الوظيفة مطلوبة لرسم شاشات الكريستال السائل. قم بتعيين هذه الوظيفة باستخدام gb_init_lcd وقم بتمكين وظيفة LCD داخل Peanut-GB عن طريق تعريف ENABLE_LCD على 1 قبل تضمين Peanut_gb.h. يتم تعيين ENABLE_LCD على 1 افتراضيًا إذا لم يتم تعريفه مسبقًا. إذا لم يتم استدعاء gb_init_lcd أو تم ضبط LCD_draw_line على NULL، فسيتم تعطيل رسم LCD.
تأتي بيانات البكسل المرسلة إلى LCD_draw_line مع بيانات الظل والطبقة. أول بتتين الأقل أهمية هما بيانات الظل (أسود، داكن، فاتح، أبيض). البتات 4 و5 عبارة عن بيانات طبقة (OBJ0، OBJ1، BG)، والتي يمكن استخدامها لإضافة المزيد من الألوان إلى اللعبة بنفس الطريقة التي يفعلها Game Boy Color في ألعاب Game Boy الأقدم.
هذه الوظائف مطلوبة لمحاكاة الصوت والإخراج. لا يتضمن Peanut-GB محاكاة صوتية، لذا يجب استخدام مكتبة خارجية. يجب تحديد هذه الوظائف ويجب تمكين إخراج الصوت عن طريق تحديد ENABLE_SOUND إلى 1 قبل تضمين Peanut_gb.h.
هذه الوظائف مطلوبة للاتصال التسلسلي. قم بتعيين هذه الوظائف باستخدام gb_init_serial. إذا لم يتم تعيين هذه الوظائف، فستعمل المحاكاة كما لو لم يكن هناك كابل ربط متصل.
يتم توفير هذه الوظائف بواسطة Peanut-GB.
تعمل هذه الوظيفة على إعادة ضبط اللعبة التي يتم لعبها، كما لو تم إيقاف تشغيل وحدة التحكم وتشغيلها. يتم استدعاء gb_reset بواسطة gb_init لتهيئة سجلات وحدة المعالجة المركزية.
تقوم هذه الوظيفة بإرجاع حجم حفظ اللعبة الجاري لعبها. ترجع هذه الوظيفة 0 إذا كانت اللعبة لا تستخدم أي بيانات محفوظة.
تعمل هذه الوظيفة على تشغيل وحدة المعالجة المركزية حتى يتم عرض إطار كامل على شاشة LCD.
تقوم هذه الوظيفة بحساب تجزئة عنوان اللعبة. يتم حساب هذا التجزئة بنفس طريقة حساب Game Boy Color لإضافة لون إلى ألعاب Game Boy.
تقوم هذه الوظيفة بإرجاع اسم اللعبة.
اضبط وقت ساعة الوقت الحقيقي (RTC). تستخدم بعض الألعاب بيانات RTC هذه.
مهملة: لا تستخدم. يتم وضع علامة على RTC داخليًا.
تنفيذ صورة bootrom عند إعادة التعيين. يجب إجراء إعادة التعيين بعد الاتصال بـ gb_set_bootrom حتى تدخل هذه التغييرات حيز التنفيذ. وذلك لأن gb_init يستدعي gb_reset، ولكن يجب استدعاء gb_set_bootrom بعد gb_init. يجب أن يكون التمهيد إما DMG أو MGB.
هذا المشروع مرخص بموجب ترخيص MIT.