ProjectPSX هو محاكي مشفر بلغة C# لجهاز Sony Playstation الأصلي (Playstation 1/PS1/PSX)
هذا مشروع شخصي يهدف إلى التعرف على الأجهزة وتطوير المحاكيات.
لا يستخدم ProjectPSX أي تبعية خارجية ويستخدم كود C# مبسطًا إلى حد ما.
في الوقت الحالي يتم تنفيذ ما يلي:
ما لم يتم تنفيذه (ولكن ينبغي...):
ملحوظة: يلزم وجود PlayStation Bios صالح لتشغيل المحاكي. SCPH1001.BIN هو السير الافتراضي للتطوير ولكن تم الإبلاغ عن أن البعض الآخر مثل SCPH5501 أو SCPH7001 يعمل.
لا توجد قائمة التوافق. يتم تشغيل العديد من الألعاب ودخولها على الرغم من أن بعضها قد يواجه مشكلات عشوائية. بعض الألعاب التي اختبرتها والتي استيقظت هي: Ridge Racer وCastlevania Symphony of the Night وFinal Fantasy 7 وCrash Bandicoot 1 و2 و3 وSpyro the dragon وTekken 1 و2 و3 وToshinden وTime Crisis وTobal 1 و 2، قصة فاجرانت، ستريت فايتر زيرو 3، روكمان/ميجامان 8/X4، باراسايت إيف، ميتال جير سوليد، كراش تيم السباق... البعض الآخر مثل Final Fantasy IX أو Gran Turismo أو Resident Evil 3 أو Marvel vs Capcom ولكن لديهم مشكلات عشوائية يجب إصلاحها.
ملاحظة: يتم ترميز ملفات بطاقة الذاكرة إلى "memcard.mcr" في الدليل الجذر. إذا لم يكن هناك أحد، فسيتم إنشاء واحدة جديدة عند الحفظ.
جوهر ProjectPSX نفسه عبارة عن مكتبة مقطوعة الرأس بدون أي تبعيات. يأتي الحل مع مشروعين إضافيين هما ProjectPSX.Winforms وProjectPSX.OpenTK. يستخدم مشروع Winforms NAudio لإخراج الصوت.
عند استخدام مشروع Winform، سيظهر مربع حوار الملف عند التنفيذ. حدد ملف Bin (استخدم المسار 1) أو ملف Cue لإنشاء مسارات القرص المضغوط لتغذية القرص المضغوط.
عند استخدام مشروع OpenTK، ما عليك سوى سحب وإسقاط ملف bin/cue في النافذة.
يتم ترميز ملفات السير وملفات التوسيع ضمن فئة BUS.
بمجرد تشغيل الطاقة، يتم تعيين الإدخال على النحو التالي:
نعم يمكنك، ولكن لا ينبغي لك. هناك الكثير من المحاكيات الأخرى الأكثر قدرة. هذا مشروع شخصي قيد التنفيذ يهدف إلى التعرف على المحاكيات وتنفيذ الأجهزة. يمكن أن ينقطع أثناء المحاكاة نظرًا لوجود الكثير من ميزات الأجهزة غير المنفذة.
إنه عارض VRAM. يتضمن جميع القوام وجداول قفل الألوان ومخازن العرض المؤقتة التي يستخدمها برنامج Playstation. يتم استخدامه لأغراض التصحيح. يمكنك تبديله بالضغط على TAB على لوحة المفاتيح.
ربما يرجع ذلك إلى عدم تنفيذ الأجهزة أو تنفيذ جهاز غير صحيح، بشكل أساسي توقيتات cdrom/dma/mdec.
قم بإلغاء التعليق على وظائف bios.verbose() أو TTY() في الحلقة الرئيسية لوحدة المعالجة المركزية. يمكنك أيضًا تفكيك () تعليمات MIPS CPU وprintRegs () على كود التشغيل الحالي.
لقد كنت مهتمًا بمحاكاة الأجهزة لبعض الوقت. لقد بدأت في استخدام Java Chip8 ووحدة المعالجة المركزية C# Intel 8080 (المستخدمة في لعبة Space Invaders الكلاسيكية). في وقت لاحق قمت بعمل Nintendo Gameboy. كنت أرغب في الاستمرار في عمل بعض الألعاب ثلاثية الأبعاد، لذلك انتهيت من استخدام PSX لأنه يحتوي على مكتبة جيدة من الألعاب...
لقد استخدمت بشكل أساسي وثائق Martin Korth PSX-SPX حول أجهزة Playstation على https://problemkaputt.de/psx-spx.htm كما كان الأشخاص في قناة #playstation على emudev discord على https://discord.gg/dkmJAes مفيدة جدا.
كانت Winforms هي أسهل طريقة للحصول على الإخراج بالنسبة لي حيث تم تصميمها بسرعة. في الوقت الحالي، يتم فصل واجهة المستخدم عن المركز بحيث يمكن إضافة أي نظام نوافذ طالما تم تنفيذ واجهة IHostWindow. يوجد أيضًا مشروع am OpenTK حول الحل الذي يعمل على Linux.
في بداية هذا المشروع، كنت رجلاً يعمل في وظيفة مملة لا علاقة لها بالبرمجة. لم أرغب في القيام بذلك لبقية حياتي لذلك بدأت الدراسة لمحاولة تغيير مهنتي. تعلمت في النهاية (قليلاً) وبدأت في برمجة كل ما جعلني سعيدًا. أخيرًا حصلت على وظيفة كمطوّر Android...