سؤال

أريد أن أهتم بكتابة المحاكي البسيط الخاص بي لـ Z80 المعالج.ليس لدي خبرة في هذا النوع من البرمجة.أنا جيد في الغالب في استخدام اللغات المبنية على لغة C لأنها اللغات التي أعرفها بشكل أفضل.

ما الذي أحتاجه لإنجاز هذا وما هي بعض البرامج التعليمية/المراجع الجيدة التي يمكن أن تساعدني في هذا المشروع؟

أود أيضًا الحصول على برنامج تعليمي لترميز تطبيق تفريغ ROM لجهازي تي آي-84 بلس آلة حاسبة حتى أتمكن من استخدام ROM الخاص به مع هذا المحاكي.

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

المحلول

وربما تبدأ من خلال النظر في هذه:

وهناك تعليمي جيد يمكن العثور عليها هنا: المستقلة دليل الجمعية Z80

Z80 الوثائق

موثقة Z80 الموثقة v0.91 (قوات الدفاع الشعبي)

الكامل Z80 التعليمات المرجعي

Z80 المعالجات الدقيقة مجموعة التعليمات ملخص

نصائح أخرى

إنها رحلة جانبية إلى حد ما، ولكن بما أنك تقول إنه ليس لديك أي خبرة في هذا النوع من البرمجة، فقد ترغب في البدء ببناء محاكي لـ الآلة الافتراضية العالمية من مسابقة البرمجة ICFP 2006.تستغرق هذه المهمة من المبرمج ذي الخبرة 90 دقيقة، ولكن تمكنت العديد من الفرق التي ليس لديها خبرة من إكمالها في غضون أيام قليلة.عند الانتهاء من المحاكي، فإنه يفتح مجموعة من الأشياء الممتعة، وقد يكون ذلك بمثابة إحماء جيد قبل التعامل مع Z80.

بعض الأشياء التي يجب إضافتها (خاصة لـ Z80):

  1. لا تثق في أن الوثائق خالية من الأخطاء بنسبة 100%

    لم أر أي شيء بدون أخطاء بما في ذلك تلك المذكورة هنا.

  2. اختبر نواة وحدة المعالجة المركزية لديك بحثًا عن الأخطاء بشكل صحيح

    سيوفر لك الكثير من الصداع والارتباك لاحقًا.

للاختبار أستخدم ثلاث طرق:

  1. التنقل/التتبع مقابل التعليمات البرمجية المعروفة (عادة ما يتم التعليق على تفكيك ROM)

    إنها الخطوة الأولى عندما لا يعمل شيء بعد.سترى تعليمات مشفرة بشكل سيئ.

  2. قم بتضمين نوى Z80 مختلفة في المحاكي الخاص بك وقم بمعالجة كل شيء كمضاهاة مزدوجة

    أنشئ محاكيين "منفصلين" بنفس نظام التنقل والتتبع والتشغيل.يجب أن يكون لكل من وحدات المعالجة المركزية أجهزة ذاكرة خاصة بها، وما إلى ذلك.

    My dual emulator example

    • قم بتشغيل المحاكي وبعد كل تعليمات، قم بمقارنة السجلات ومواقع الذاكرة المباشرة مثل [hl],[sp],[sp-1]...
    • عند الاختلاف الأول، توقف وانظر ما هي التعليمات التي تسببت في ذلك.
      قم بتصحيحه واستمر حتى تصبح "خاليًا من الأخطاء".احذر من أن النواة الثانية يمكن أن تكون أيضًا بها عربات التي تجرها الدواب، لذا قم بتصحيح الأخطاء بحذر.
  3. عندما تكون أكثر قدرة على التشغيل، استخدم أداة الاختبار الأساسية

    يستخدم زيكسال المتمرن.إنه الأفضل على Z80 (على الأقل من تجربتي).لقد ساعدني في أشياء كثيرة جدًا (أصبح جوهري الآن متوافقًا بنسبة 100٪ مع ZEXALL).يتم إجراؤه ضد أجهزة حقيقية، لذا لا توجد أخطاء فيه.انها من كب/م لذلك تحتاج بعض الإصدارات وضع ذاكرة الوصول العشوائي 64 كيلو بايت يهرب.مختلف نظام التشغيل/ذاكرة القراءة فقط أو أي شيء يمكن أن يتسبب في فشل بعض تعليمات الوصول إلى الذاكرة، لذلك تحتاج إلى العثور على CRC المصححة أو مقارنتها بالأجهزة الحقيقية.

    على سبيل المثال، الخام زيكسال يفشل في أشياء كثيرة طيف ZX (كما يتم ذلك ل إم إس إكس و 64 كيلو رام بدون ذاكرة للقراءة فقط)، ولكن هناك إصدارات تم إجراؤها بشكل حقيقي طيف ZX وهم 100% نعم على طيف ZX (وعلى المحاكي أيضًا :))

    Z80all instruction exerciser
    
    <adc,sbc> hl,<bc,de,hl,sp>...OK
    add hl,<bc,de,hl,sp>.........OK
    add ix,<bc,de,ix,sp>.........OK
    add iy,<bc,de,iy,sp>.........OK
    aluop a,nn...................OK
    aluop a,<b,c,d,e,h,l,(hl),a>.OK
    aluop a,<ixh,ixl,iyh,iyl>....OK
    aluop a,(<ix,iy>+1)..........OK
    bit n,(<ix,iy>+1)............OK
    bit n,<b,c,d,e,h,l,(hl),a>...OK
    cpd<r>.......................OK
    cpi<r>.......................OK
    <daa,cpl,scf,ccf>............OK
    <inc,dec> a..................OK
    <inc,dec> b..................OK
    <inc,dec> bc.................OK
    <inc,dec> c..................OK
    <inc,dec> d..................OK
    <inc,dec> de.................OK
    <inc,dec> e..................OK
    <inc,dec> h..................OK
    <inc,dec> hl.................OK
    <inc,dec> ix.................OK
    <inc,dec> iy.................OK
    <inc,dec> l..................OK
    <inc,dec> (hl)...............OK
    <inc,dec> sp.................OK
    <inc,dec> (<ix,iy>+1)........OK
    <inc,dec> ixh................OK
    <inc,dec> ixl................OK
    <inc,dec>  iyh...............OK
    <inc,dec> iyl................OK
    ld <bc,de>,(nnnn)............OK
    ld hl,(nnnn).................OK
    ld sp,(nnnn).................OK
    ld <ix,iy>,(nnnn)............OK
    ld (nnnn),<bc,de>............OK
    ld (nnnn),hl.................OK
    ld (nnnn),sp.................OK
    ld (nnnn),<ix,iy>............OK
    ld <bc,de,hl,sp>,nnnn........OK
    ld <ix,iy>,nnnn..............OK
    ld a,<(bc),(de)>.............OK
    ld <b,c,d,e,h,l,(hl),a>,nn...OK
    ld (<ix,iy>+1),nn............OK
    ld <b,c,d,e>,(<ix,iy>+1).....OK
    ld <h,l>,(<ix,iy>+1).........OK
    ld a,(<ix,iy>+1).............OK
    ld <ixh,ixl,iyh,iyl>,nn......OK
    ld <bcdehla>,<bcdehla>.......OK
    ld <bcdexya>,<bcdexya>.......OK
    ld a,(nnnn) / ld (nnnn),a....OK
    ldd<r> (1)...................OK
    ldd<r> (2)...................OK
    ldi<r> (1)...................OK
    ldi<r> (2)...................OK
    neg..........................OK
    <rrd,rld>....................OK
    <rlca,rrca,rla,rra>..........OK
    shf/rot (<ix,iy>+1)..........OK
    shf/rot <b,c,d,e,h,l,(hl),a>.OK
    <set,res> n,<bcdehl(hl)a>....OK
    <set,res> n,(<ix,iy>+1)......OK
    ld (<ix,iy>+1),<b,c,d,e>.....OK
    ld (<ix,iy>+1),<h,l>.........OK
    ld (<ix,iy>+1),a.............OK
    ld (<bc,de>),a...............OK
    Tests complete
    

    في حال كنت على وشك الاستخدام زيكسال حذار أنه اختبار شامل حقا و IIRC على ~50 ميجا هرتز مضاهاة استغرق الأمر حولها 30-60 دقيقة لإكمال.ويحتاج إلى الضغط على مفتاح للتمرير عدة مرات ...

    إذا كنت بحاجة إلى نموذج تنافس، أضف الاختبارات المناسبة.ثم ابحث عن واحدة.ل طيف ZX هناك العديد من أجهزة اختبار الحافلات العائمة والمقاطعة والشاشة.ل تي آي ليس لدي أي فكرة...(أنا لست تي آي مستخدم الآلة الحاسبة)

بالمناسبة: كيف سارت الأمور مع المحاكي الخاص بك؟(هل اتممتها؟)

مجموعة التعليمات

أود نسخ مجموعة التعليمات الخاصة بي هنا ولكنها تحتوي على 1792 سطرًا و121 كيلوبايت، لذا لن تتناسب مع الحد الأقصى البالغ 30 كيلوبايت.بدلاً من ذلك يمكنك العثور عليه في رابط التنزيل في إجابتي هذه

يحتوي على "الكل" ZX التعليمات مع الصحيح OP الرموز وتوقيت الترميز ودورات الآلة.لقد استغرق الأمر مني بضع سنوات لتجميع كل الوثائق، لذا فقد نجحت زيكسال 100% بشكل صحيح.يقوم المحاكي بتحميل هذا الملف النصي (تعليمات 1792) إلى المركز init وقم بتكوين وحدة فك ترميز التعليمات والمعالج في وقت التشغيل، لذلك تمكنت من تغيير الأشياء بسرعة وبساطة كافية (إذا تم اكتشاف خطأ)...لقد أنقذني أ كثير من الوقت.

وميتش هو الصحيح تماما. تبدأ من خلال فهم المعالج. ثم لعب في جميع أنحاء قليلا عن طريق كتابة التعليمات البرمجية لتنفيذ تعليمات معينة. استخدام C ++ لهذا، راجع للشغل، وليس C، أو مفاهيم المعالج لن تعين الطبقات في التعليمات البرمجية.

في عملية تنفيذ التعليمات، ستجد تحتاج إلى تعريف أشياء مثل الأعلام، ومؤشر التعليمة. وينبغي في النهاية تحصل على حيث كنت في حاجة لتنفيذ نموذج الذاكرة، وحتى نموذج I / O.

وسيكون لديك في نهاية المطاف لمعرفة كيفية تحميل التعليمات البرمجية والبيانات في الذاكرة، وربما كيفية تفريغ إعادته إلى القرص.

وبعد ذلك فقط هل تحتاج للوصول الى نقطة محاكاة تنفيذ التعليمات البرمجية، وتحميلها في الذاكرة، في مؤشر التعليمة معينة.

وحاول أن نلقي نظرة إلى محاكاة نظام ماستر سيجا ولعبة جير (أنا متأكد من أن بعضها مفتوح المصدر). تلك لوحات المفاتيح لديها Z80 وحدة المعالجة المركزية، و ZX الطيف استخدامه أيضا، <وأ href = "http://www.worldofspectrum.org /emulators.html "يختلط =" نوفولو noreferrer "> http://www.worldofspectrum.org/emulators.html .

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

واعتمادا على الهدف الخاص بك، فإنك قد ترغب في البدء مع مقلدا القائمة بالفعل لZ80. بحث سريع يعطي العديد منهم ولكن لا منافس لTI-84. SIMH أو إطارا لأجهزة الكمبيوتر القديمة مضاهاة لديها بالفعل محاكاة معالج Z80، مضيفا مضاهاة ما تبقى من حياتك يجب أن تكون الأجهزة أسهل من البدء من الصفر. حتى لو كنت لا تذهب هذا الطريق، وهناك بعض وثائق التصميم هناك التي يمكن أن تساعدك.

وانصح ان تفكر في البدء بالكتابة مقلدا لأبسط قليلا، ولكن وحدة المعالجة المركزية ذات الصلة، و 8080 . هو في الواقع وليس تعقيد Z80 (تعليمات متعددة بايت، أكثر من وسائط معالجة، وسجلات مؤشر، الخ)، في حين أن 8080 تعليمات سهلة جدا لفك (يمكنك فقط استخدام جدول بحث 256 الدخول، كحل من الدرجة الأولى) .

وكافة التعليمات البرمجية تكتب للسيطرة على برنامج (العرض، إدخال البيانات، وعمليات تفريغ الذاكرة، الخ) ينبغي إعادة صالحة للاستخدام إذا كنت ثم قررت الذهاب في محاولة لZ80، بل ويجب تصميم واجهة المستخدم ل تكون محاكاة المعالج مستقل.

وتعلمت كل ما أعرفه عن Z80 والتجمع آلة حاسبة هنا: http://www.ticalc.org / البرمجة /

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