استمر ، الأسهل قد انتهى! والآن إلى الأصعب والمثيرة للاهتمام. إذا كنت كسولًا جدًا في القراءة ، فستجد أدناه (أقرب إلى نهاية المقالة) رابطًا للفيديو ، مع نتيجة وشرح لكل شيء ، بما في ذلك ما هو موضح في الجزء الأول. إذا كنت مهتما ، يرجى اتباع التالي.
في وضع 6 أزرار ، تحدث القراءة في 4 دورات أو مراحل (إذا تم التعبير عنها بلغة المحاكي). أي ، كل 16 مللي ثانية هناك تغيير دوري (4 دورة) في حالة تحديد الإخراج ، وتظهر كل دورة رابعة عند إخراج وحدة التحكم حالة الأزرار الإضافية. فيما يلي مخطط للقراءة ، من أجل الوضوح ، والذي يجب تكراره:

من الجيد أن يكون لدي محلل منطقي ، وبمساعدة مني اشتعلت منه خلل ، والذي تجلى في حقيقة أن الدورة لم تخرج من المرحلة الرابعة.
لن أتغلب على الأدغال ، وسأذكر هذه الوظيفة على الفور:
static u32 read_pad_6btn(int i, u32 out_bits) { u32 pad = ~PicoIn.padInt[i];
دعنا نحلل أي من الشروط ، على سبيل المثال:
if (i == 0 && phase == 1 && !(out_bits & 0x40))
يتم التحقق هنا من أننا نقرأ من
لوحة اللعبة الأولى
(i == 0) ،
ومرحلة القراءة الثانية
(المرحلة == 1) ، ويجب تعيين إخراج التحديد على 0
! (Out_bits & 0x40) . لفهم كيفية عمل هذا في المضاهاة ، قمت بتجميع التعليمات البرمجية على Xubuntu ، وقم بتشغيل Visual Studio Code ، حيث قمت بتعيين مجموعة من نقاط التوقف ، في وضع التصحيح. والنتيجة هي هذه الصورة الجميلة:

في الواقع ، نتيجة العمل هي:
هنا يجب أن أقول بضع كلمات عن المحاكي نفسه. إما أنني لم أحسبها ، أو أن هذا خطأ ، لكن المحاكي يبدأ في البداية في وضع من ثلاثة أزرار ، حتى إذا تمت الإشارة إلى عكس ذلك في الإعدادات العامة. 99 ٪ من الألعاب وهذا يكفي. من أجل الدخول في وضع التشغيل باستخدام لوحة ألعاب ذات 6 أزرار ، يجب عليك الدخول في الإعدادات والعودة إلى اللعبة دون تغيير أي شيء.
ولكن هناك لعبة واحدة خارج هذا السياق ، وهي أزرار Lost Vikings ، والأزرار X و Z و MODE تعمل بشكل جيد دون أي رقص.
PSلكن يمكنك القيام بذلك بشكل أسهل ، فقد قام شخص واحد بكتابة
سائق بالفعل للعمل باستخدام لوحة الألعاب ، وعلى مستوى منخفض للغاية. ما زلت بعيدًا عن هذا.
شكرا لاهتمامكم!