الهندسة العكسية لشريحة كمبيوتر كومودور

الخلفية والعينات الأولى



كتبت في منشور قديم أنني كنت أعمل على الهندسة العكسية لشريحة PLA الخاصة بالكومودور 128. الآن أكملت هذه العملية تقريبًا ، لذا حان الوقت لمشاركة النتائج التي توصلت إليها.



لقد كان مشروعًا مثيرًا للاهتمام لأنني لم أكن أعرف الكثير عن تصميم وتصنيع أشباه الموصلات. اقتصرت معرفتي على النظر إلى صور كريستالات والإعجاب بهذه الصور الجميلة.



بالنسبة لي ، بدأ بحثي بشراء مجهر رخيص لحام مكونات تثبيت السطح (SMD).





مجهر رخيص



بعد مرور بعض الوقت ، وجدت مقطع فيديو على Youtube يوضح طريقة أسهل لإزالة بلورات السيليكون من العلبة.





بدت الطريقة بسيطة بما يكفي للتنفيذ في المنزل ، لأن لدي بالفعل جميع المعدات اللازمة. عادةً ما تتطلب إزالة IC من العبوة حامض الكبريتيك الساخن أو مواد كيميائية خطرة أخرى لم أرغب حقًا في تجربتها في المنزل. لذلك قمت بحفر اثنين من رقائق MOS المكسورة في مخزوني (لا تتخلص من أي شيء أبدًا ، فقد يكون مفيدًا). بقليل من العمل ، حصلت على قاتلين من طراز 8521R0 وواحد من جيش التحرير الشعبى الصينى 8721. في المنشور السابق ، عرضت أول صورة حقيقية.





صورة كاملة لشريحة 8721 PLA



أفضل مجهر



على الرغم من نجاح التجربة ، إلا أنني أدركت على الفور أن المجهر لم يكن لديه دقة كافية لالتقاط الصور بجودة كافية بالنسبة لي. مع عدسة 2x Barlow ، يكون الحد الأقصى للتكبير 90x. بالإضافة إلى ذلك ، لا يحتوي المجهر على مرحلة ، لذلك اضطررت إلى وضع البلورة على المنضدة ثم تحريك المجهر بالكامل ؛ هذا التصميم غير مستقر للغاية ومن الصعب إزالة الأجزاء الضرورية بمساعدته.



لذلك وجدت واشتريت مجهرًا أفضل ، بسعر معقول أيضًا.





مجهر AmScope ME580-T لقد قام بعمل



أفضل بكثير في التقاط صور جيدة الجودة ، لكنني لم أكن سعيدًا بالكاميرا التي اشتريتها بها. هذه كاميرا رخيصة بدون جهاز تحكم عن بعد ، باستثناء تطبيق AmScope. في ذلك الوقت ، أصدرت مؤسسة Raspberry Pi كاميرا جديدة عالية الجودة لـ Raspberry Pi. تحتوي هذه الكاميرا على حامل C متوافق مع المجهر ، لذلك اشتريته على الفور وقمت بتثبيته على المجهر. إنه يقوم بعمل رائع في توفير التحكم الكامل من لينكس المريح.





جزء من قالب السيليكون 8521R0



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



المكننة



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



بعد القيام بالكثير من التصميم والطباعة ثلاثية الأبعاد والبحث عن البرامج الثابتة CNC ، توصلت إلى التصميم التالي:





المجهر المعدل AmScope ME580-T يوجد



في الأعلى شاشة Raspberry مقاس 7 بوصات ، وخلفها Raspberry Pi4. لا تُظهر الصورة كاميرا RPi HiQ المركبة على المجهر. يلتقط RPi الصور ويعرضها على الشاشة وينفذ أيضًا كود Python الذي يقود لوحة CNC.



يتم تشغيل المرحلة ومرحلة التسوية بواسطة 28BYJ-48 محركات متدرجة ، والتي يتم تشغيلها بواسطة لوحة ESP32 صغيرة تعمل Grbl_Esp32 وأربعة وحدات تحكم بمحرك متدرج AD4498.



تحتوي الدائرة على بعض مشكلات البرامج والأجهزة ، ولكنها تعمل جيدًا لأغراضي.



عكس الشريحة



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



بناءً على التخطيطي من ويكيبيديا ، يجب أن نتوقع وجود صفيفتين رئيسيتين في الشريحة ، AND و OR. ترتبط المدخلات بـ AND وتخرج المسامير من مجموعة OR.



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





لقطة من 8721 PLA يموت مع التعليقات التوضيحية



هنا نرى دبابيس الإدخال / الإخراج المميزة واتصالها بإطار الرصاص ودبابيس DIP نفسها. تظهر أيضًا المنطقتان الرئيسيتان اللتان تشكلان بنية PLA ، وهما المصفوفة AND والصفيف OR. أيضًا ، هناك بعض المنطق الإضافي هنا معلّم بعلامة استفهام. كان الغرض منه غير معروف بالنسبة لي ، ولكن نظرًا لأن جميع جهات اتصال الإخراج تمر عبره ، فقد افترضت أن هذه كانت نوعًا من مرحلة الإخراج.



و مجموعة



لذلك ، إذا بدأنا أولاً في فحص المصفوفة AND عن كثب ، فسنرى الصورة أدناه. الألوان مشوهة قليلاً ، لأن هذه الصورة تم التقاطها بكاميرا AmScope ولم أتمكن من معرفة كيفية ضبط توازن اللون الأبيض عليها.





ومصفوفة مع طبقة معدنية



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



لحسن الحظ ، كانت التفاصيل التي احتجت إليها موجودة في طبقة الانتشار الموجودة في الركيزة:





ركيزة المصفوفة والنظر



عن كثب إلى الصورة ، يمكنك رؤية خطوط متموجة صغيرة حيث يوجد الترانزستور لإنشاء اتصال في المصفوفة.



أو مجموعة



بالانتقال إلى المصفوفة OR ، نرى نفس التنسيق بالضبط. يصعب تحليله دون إزالة الطبقة المعدنية ، ولكنه أسهل مقارنة بمصفوفة AND. ويكون الأمر أسهل بكثير عندما يتم ترك الركيزة وطبقة الانتشار فقط.





أو تموت بطبقة معدنية





أو ركيزة مصفوفة



فك مصفوفة كاملة



مسلحين بهذه المعرفة ، يمكننا المضي قدمًا لاستعادة مصفوفة منطق PLA الكاملة من الصور.



لقد قمت بتمييز جميع الترانزستورات في كل مصفوفة بالنقاط وحصلت على الصورة التالية:





مصفوفة AND ذات طبقة معدنية



في مصفوفة AND ، تكون جميع المدخلات أفقية ، ويتم تغذية إشارة عادية ومعكوسة لكل سطر. في مصفوفة OR ، تكون جميع العملاء المتوقعين أفقية ومتصلة بخطوط رأسية تسمى minterms.



بعد فحص النقاط ، يمكننا فك تشفير minterms ، وتنفيذ المنطق "AND" لجميع الخطوط الرأسية في مصفوفة AND ، على سبيل المثال



p0 = CHAREN & HIRAM & BA & !MS3 & GAME & RW & AEC & A12 & !A13 & A14 & A15



بالنسبة إلى المسامير ، نأخذ خطًا أفقيًا لكل دبوس وندمجها مع "أو" ، على سبيل المثال



SDEN = p42 | p43 | p66 | p69



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



مرحلة الانتاج



دعنا نعود إلى الصورة الكاملة للكريستال - الآن لدينا كل شيء ما عدا المستطيل المميز بعلامة استفهام على مسار الخروج.



بالنظر إلى الصور عالية الدقة لهذه المنطقة ، نرى أنماطًا متشابهة لكل دبوس. في جميع الحالات باستثناء حالتين ، يتم تجاوز هذه البنية وينتقل الإخراج من مصفوفة OR مباشرة إلى طرف الإخراج. ومع ذلك ، لا ينطبق هذا على جهتي اتصال: DWEو CASENB.



DWEهي إشارة تمكين الكتابة المطبقة على شرائح DRAM للنظام الرئيسي ، ويمرر CASENB إشارة CAS إلى ذاكرة الوصول العشوائي. تتم معالجة هاتين الإشارتين بطريقة ما بواسطة هياكل بوابة الإخراج هذه ، لذلك كنت بحاجة لعكس هندسة هذه الكتلة.





كتلة مخرج بطبقة معدنية





ركيزة كتلة الإخراج



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





كتلة حلبة الانتاج



تبحث أبعد قليلا، والطريقة التي يتم بها استخدام هذه الدائرة هي مع دبابيس DWEو CASENBتحويله إلى D-مزلاج منتظم. يتم تمثيل المزلاج الذي يسمح بذلك في PLA بزوج من الخطوط في OR.



نتيجة



لذلك حصلنا على النتيجة النهائية والآن يمكننا كتابة رمز HDL الكامل لشريحة C128 PLA. لهذا ، سأستخدم Verilog. يعتبر. أن هذا هو أول كود Verilog لي ، لذلك قد لا يكون هو الأمثل. يعتبر استخدام مزلاج D للدبوس عمومًا ممارسة سيئة في Verilog ، ولكن في هذه الحالة أقوم بتكرار منطق ووظيفة الشريحة النهائية.



لقد تحققت منه إن أمكن ، ولكن إذا فاتني شيء ، فيرجى الإبلاغ عنه!



على عكس PLA C64 ، لا يمكن استبدال شريحة PLA C128 بـ EPROM بسيط أو شيء مشابه بسبب وجود مزلاج الإخراج.



module pla_8721(
    input rom_256,
    input va14,
    input charen,
    input hiram,
    input loram,
    input ba,
    input vma5,
    input vma4,
    input ms0,
    input ms1,
    input ms2,
    input ms3,
    input z80io,
    input z80en,
    input exrom,
    input game,
    input rw,
    input aec,
    input dmaack,
    input vicfix,
    input a10,
    input a11,
    input a12,
    input a13,
    input a14,
    input a15,
    input clk,

    output sden,
    output roml,
    output romh,
    output clrbnk,
    output from,
    output rom4,
    output rom3,
    output rom2,
    output rom1,
    output iocs,
    output dir,
    output reg dwe,
    output reg casenb,
    output vic,
    output ioacc,
    output gwe,
    output colram,
    output charom);

wire p0;
wire p1;
wire p2;
wire p3;
wire p4;
wire p5;
wire p6;
wire p7;
wire p8;
wire p9;
wire p10;
wire p11;
wire p12;
wire p13;
wire p14;
wire p15;
wire p16;
wire p17;
wire p18;
wire p19;
wire p20;
wire p21;
wire p22;
wire p23;
wire p24;
wire p25;
wire p26;
wire p27;
wire p28;
wire p29;
wire p30;
wire p31;
wire p32;
wire p33;
wire p34;
wire p35;
wire p36;
wire p37;
wire p38;
wire p39;
wire p40;
wire p41;
wire p42;
wire p43;
wire p44;
wire p45;
wire p46;
wire p47;
wire p48;
wire p49;
wire p50;
wire p51;
wire p52;
wire p53;
wire p54;
wire p55;
wire p56;
wire p57;
wire p58;
wire p59;
wire p60;
wire p61;
wire p62;
wire p63;
wire p64;
wire p65;
wire p66;
wire p67;
wire p68;
wire p69;
wire p70;
wire p71;
wire p72;
wire p73;
wire p74;
wire p75;
wire p76;
wire p77;
wire p78;
wire p79;
wire p80;
wire p81;
wire p82;
wire p83;
wire p84;
wire p85;
wire p86;
wire p87;
wire p88;
wire p89;

wire casenb_int;
wire casenb_latch;

/* Product terms */

assign p0 = charen & hiram & ba & !ms3 & game &  rw & aec & a12 & !a13 & a14 & a15;
assign p1 = charen & hiram &      !ms3 & game & !rw & aec & a12 & !a13 & a14 & a15;
assign p2 = charen & loram & ba & !ms3 & game &  rw & aec & a12 & !a13 & a14 & a15;
assign p3 = charen & loram &      !ms3 & game & !rw & aec & a12 & !a13 & a14 & a15;

assign p4 = charen & hiram & ba & !ms3 & !exrom & !game &  rw & aec & a12 & !a13 & a14 & a15;
assign p5 = charen & hiram &      !ms3 & !exrom & !game & !rw & aec & a12 & !a13 & a14 & a15;
assign p6 = charen & loram & ba & !ms3 & !exrom & !game &  rw & aec & a12 & !a13 & a14 & a15;
assign p7 = charen & loram &      !ms3 & !exrom & !game & !rw & aec & a12 & !a13 & a14 & a15;

assign p8 = ba & !ms3 & exrom & !game & rw & aec & a13 & !a13 & a14 & a15;
assign p9 =      !ms3 & exrom & !game & rw & aec & a12 & !a13 & a14 & a15;

assign p10 = ba & !ms2 & ms3 &  rw & aec & a12 & !a13 & a14 & a15;
assign p11 =      !ms2 & ms3 & !rw & aec & a12 & !a13 & a14 & a15;

assign p12 = charen & hiram & ba & !ms3 & game &  rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p13 = charen & hiram &      !ms3 & game & !rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p14 = charen & loram & ba & !ms3 & game &  rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p15 = charen & loram &      !ms3 & game & !rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;

assign p16 = charen & hiram & ba & !ms3 & !exrom & !game &  rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p17 = charen & hiram &      !ms3 & !exrom & !game & !rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p18 = charen & loram & ba & !ms3 & !exrom & !game &  rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p19 = charen & loram &      !ms3 & !exrom & !game & !rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;

assign p20 = ba & !ms3 & exrom & !game & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p21 =      !ms3 & exrom & !game & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;

assign p22 = ba & !ms2 & ms3 &  rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p23 =      !ms2 & ms3 & !rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;

assign p24 = charen & hiram & ba & !ms3 & game &  rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p25 = charen & hiram &      !ms3 & game & !rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p26 = charen & loram & ba & !ms3 & game &  rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p27 = charen & loram &      !ms3 & game & !rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;

assign p28 = charen & hiram & ba & !ms3 & !exrom & !game &  rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p29 = charen & hiram &      !ms3 & !exrom & !game & !rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p30 = charen & loram & ba & !ms3 & !exrom & !game &  rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p31 = charen & loram &      !ms3 & !exrom & !game & !rw & aec & !a10 & a11 & a12 & !a13       & a15;

assign p32 = ba & !ms3 & exrom & !game & rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p33 =      !ms3 & exrom & !game & rw & aec & !a10 & a11 & a12 & !a13       & a15;

assign p34 = ba & !ms2 & ms3 &  rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p35 =      !ms2 & ms3 & !rw & aec & !a10 & a11 & a12 & !a13       & a15;

assign p36 = !aec;
assign p37 = !rw & aec & !a10 & a11 & a12 & !a13 & a15;

assign p39 = !charen & hiram & !ms3 &           game & rw & aec & a12 & !a13 & a14 & a15;
assign p40 = !charen & loram & !ms3 &           game & rw & aec & a12 & !a13 & a14 & a15;
assign p41 = !charen & hiram & !ms3 & !exrom & !game & rw & aec & a12 & !a13 & a14 & a15;

assign p42 = va14 & !vma5 & vma4 & !ms3          &  game & !aec;
assign p43 = va14 & !vma5 & vma4 & !ms3 & !exrom & !game & !aec;

assign p44 = !ms0 & !ms1 & ms2 &ms3 & z80en & rw & aec & a12 & !a13 & a14 & a15;
assign p45 = hiram & loram & !ms3 & !exrom & rw & aec & !a13 & !a14 & a15;

assign p46 = !ms3 & exrom & !game & aec & !a13 & !a14 & a15;
assign p47 = ms0 & !ms1 & ms3 & exrom & !game & aec & !a14 & a15;
assign p48 = !ms0 & ms1 & ms3                 & aec & !a14 & a15;

assign p49 = hiram & !ms3 & !exrom & !game & aec & a13 & !a14 & a15;
assign p50 = ms3 & exrom & !game & aec & a13 & !a14 & a15;

assign p51 = vma5 & vma4 & !ms3 & exrom & !game & !aec;
assign p52 =  ms0 & !ms1 & ms3 & rw & aec & !a12 & !a13 & a14 & a15;
assign p53 = !ms0 &  ms1 & ms3 & rw & aec & !a12 & !a13 & a14 & a15;
assign p54 = !ms0 & !ms1 & ms3 & rw & aec & !a12 & !a13 & a14 & a15;

assign p55 = !ms0 & !ms1 & z80io & !z80en & rw & aec & !a12 & !a13 & !a14 & !a15;
assign p56 = !ms0 & !ms1 & ms3 & rw & aec & !a14 &  a15;
assign p57 = !ms0 & !ms1 & ms3 & rw & aec &  a14 & !a15;

assign p58 = hiram         & !ms3          &  game & rw & aec & a13 &  a14 & a15;
assign p59 = hiram         & !ms3 & !exrom & !game & rw & aec & a13 &  a14 & a15;
assign p60 = hiram & loram & !ms3          &  game & rw & aec & a13 & !a14 & a15;

assign p61 = !z80io & !z80en & aec & !a10 & !a11        & !a13 & a14 & a15;
assign p62 = !z80io & !z80en & aec               &  a12 & !a13 & a14 & a15;
assign p63 = !z80io & !z80en & aec & !a10 &  a11 &  a12 & !a13 & a14 & a15;

assign p64 = !rw & aec;
assign p65 =  rw & aec;
assign p66 = !aec;

assign p67 = !ms2 & !z80en       & aec & !a10 & !a11 & a12 & !a13 & !a14 & !a15;
assign p68 = !ms2 & !z80en & !rw & aec & !a10 & !a11 & a12 & !a13 & !a14 & !a15;

assign p69 = !charen & !vma5 & vma4 & ms3 & aec;

assign p70 = !rom_256 & !ms0 & !ms1 & ms3 & rw & aec               & a14 & !a15;
assign p71 = !rom_256 & !ms0 & !ms1 & ms3 & rw & aec & !a12 & !a13 & a14 &  a15;
assign p72 = !rom_256 & !ms0 & !ms1 & z80io & !z80en & rw & aec & !a12 & !a13 & !a14 & !a15;

assign p73 = clk;
assign p74 = rw & !aec & vicfix;

assign p75 =            !ms0 & !ms1       & ms3 & rw & aec       &  a13 & a14 & a15;
assign p76 = !rom_256 & !ms0 & !ms1       & ms3 & rw & aec       &  a13 & a14 & a15;
assign p77 =            !ms0 &  ms1       & ms3 & rw & aec       &  a13 & a14 & a15;
assign p78 =            !ms0 &  ms1 & ms2 & ms3 & rw & aec & a12 & !a13 & a14 & a15;
assign p79 =             ms0 & !ms1       & ms3 & rw & aec       &  a13 & a14 & a15;
assign p80 =             ms0 & !ms1 & ms2 & ms3 & rw & aec & a12 & !a13 & a14 & a15;

assign p81 = !ms3 & exrom & !game & aec &  a12        & !a14 & !a15;
assign p82 = !ms3 & exrom & !game & aec        &  a13 & !a14;
assign p83 = !ms3 & exrom & !game & aec               &  a14;
assign p84 = !ms3 & exrom & !game & aec & !a12 & !a13 &  a14 &  a15;

assign p85 = !loram & ms3 &  aec;
assign p86 = !hiram & ms3 & !aec;

/* outputs */

assign sden = p42 || p43 || p66 || p69;
assign roml = p45 || p46 || p47;
assign romh = p49 || p50 || p51 || p52 || p79 || p80;
assign clrbnk = p85 || p86;
assign from = p48 || p53 || p77 || p78;
assign rom4 = p54 || p55 || p75;
assign rom3 = p56 || p70;
assign rom2 = p57;
assign rom1 = p58 || p59 || p60 || p71 || p71 || p76;
assign iocs = p0 || p1 || p2 || p3 || p4 || p5 || p6 || p7 || p8 || p9 || p10 || p11 || p62;
assign dir = p12 || p14 || p16 || p18 || p20 || p22 || p24 || p26 || p28 || p30 || p32 || p34 || p39 || p40 || p41 || p44 || p65;
assign vic = p12 || p13 || p14 || p15 || p16 || p17 || p18 || p19 || p20 || p21 || p22 || p23 || p61;
assign ioacc = p0 || p1 || p2 || p3 || p4 || p5 || p6 || p7 || p8 || p9 || p10 || p11 || 
               p12 || p13 || p14 || p15 || p16 || p17 || p18 || p19 || p20 || p21 || p22 || p61 || p62;
assign gwe = p37;
assign colram = p24 || p25 || p26 || p27 || p28 || p29 || p30 || p31 || p32 || p33 || p34 || p35 || p36 || p63 || p67;
assign charrom = p39 || p40 || p41 || p42 || p43 || p44 || p69;

assign casenb_latch = p73 || p74;

assign casenb_int = p0 || p1 || p2 || p3 || p4 || p5 || p6 || p7 || p8 || p9
                || p10 || p11 || p12 || p13 || p14 || p15 || p16 || p17 || p18 || p19
                || p20 || p21 || p22 || p23 || p39 || p40 || p41 || p42 || p43 || p44
                || p45 || p46 || p47 || p48 || p49 || p50 || p51 || p52 || p53 || p54
                || p55 || p56 || p57 || p58 || p59 || p60 || p61 || p62 || p63 || p67
                || p69 || p70 || p71 || p72 || p75 || p76 || p77 || p78 || p79 || p80
                || p81 || p82 || p83 || p84;

/* Latched outputs */

always @ (clk or p64)
  if (clk)
    dwe <= p64;

always @ (casenb_latch or casenb_int)
  if (casenb_latch)
    casenb <= casenb_int;

endmodule


ماذا بعد



ستكون الشريحة التالية التي سيتم تحليلها هي شريحة الكمبيوتر C128 MMU ، والتي ستستغرق وقتًا أطول للعمل عليها ، لأنها ليست مجرد PLA عادي.



أنظر أيضا:






All Articles