سؤال

مقدمًا، أعتذر عن الصراحة والغموض العام في هذا السؤال، لأنني بصراحة معرفتي بالموضوع غير مكتملة للغاية وأجد صعوبة في وصف مشكلتي.لم أكن أرغب حقًا في النشر، لكنني عالق تمامًا.

لقد بدأت تشغيل محاكي NES.لقد تم تفسيره (لذا لا توجد إعادة تركيب ديناميكي).

يمكن لـ Atm تحميل وتعيين roms (mapper 0 roms) وتنفيذ كود init مباشرة حتى حيث يجب أن أتعامل مع المقاطعات وPPU.هذا هو المكان الذي أنا عالقة فيه.

هنا مثال على الإخراج من جهاز الصراف الآلي الخاص بي.يبدأ التنفيذ عند 8000، ووصلت إلى حلقة لا نهائية عند 800a حيث ليس لدي أي فكرة عن كيفية التقدم من هناك.

8002: LDA #$10    ; read immediate value to set PPU control registers 
8004: STA $2000   ; store value 
8007: LDX #$FF    ; load immediate value into X register 
8009: TXS         ; store X register into stack 
800a: LDA $2002   ; read PPU flags into accumulator (set N flag based on bit 7) 
800d: BPL         ; test N flag, branch to 800a if not positive, (N is set) 
800a: LDA $2002
800d: BPL
800a: LDA $2002
800d: BPL
800a: LDA $2002
800d: BPL
etc, etc etc (inf loop)

لذلك سؤالي هو هل يمكن لأحد أن يشرح لي أساسيات تكرار واحد من خلال عرض PPU بالنسبة لي، بما في ذلك أشياء مثل عدد الدورات والمقاطعات وما إلى ذلك (على سبيل المثال.ارسم شاشة كاملة بطول 240 خطًا ضوئيًا وانتقل إلى الشاشة التالية).

هل كانت مفيدة؟

المحلول

هناك محاكيات هناك، هل بحثت في مصادرها للحصول على الإجابة؟عادةً ما تكون هذه مكتوبة للأداء وليست قابلة للقراءة جدًا ولكن قد تجد معلومات مفيدة تساعدك على المضي قدمًا.هل ينتظر الكود تنفيذ المقاطعة وهل قمت بتنفيذ تلك المقاطعة؟ربما تقوم المقاطعة بتعديل عنوان المرسل وتسمح للبرنامج بالاستمرار؟هل يتم استطلاع الحلقة اللانهائية قليلاً في السجل؟أم أنها فرع غير مشروط للذات؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top