
محاكي PDP-11/34 على مستوى الدوائر
ll/34 هو محاكي على مستوى الدارة الكهربائية للحاسوب PDP-11/34A (1976)، يشغل وحدة معالجة مركزية افتراضية تم هندستها عكسياً من المخططات والبرمجيات الدقيقة والتسجيلات المنطقية لـ PDP-11/34A حقيقي.
صُمم في الأصل كنسخة رقمية طبق الأصل من وحدة المعالجة الحقيقية للمساعدة في استكشاف الأخطاء على مستوى الإشارة. تتكون وحدة المعالجة الافتراضية KD11-EA أساساً من ترجمة C للمخططات، واستعلامات لجداول ROM. جميع ذاكرات ROM التوافقية (combinational ROMs) معمولة عكسياً، ومولد الساعة منمذج بدقة.
تم اختيار مستوى الدارة (جداول الحقيقة لـ ROM + المنطق التوافقي) بدلاً من مستوى البوابات (Verilog) لأنه منخفض المستوى بما يكفي لإعادة إنتاج أخطاء العتاد، وسريع بما يكفي لتشغيل البرامج.
جميع الأجهزة موصولة بلوحة الخلفية UNIBUS (unibus.c)، التي تقوم بفك ترميز العناوين والتوقيت ودورات الناقل.
داخلياً، تتكون وحدة المعالجة من المكونات التالية:
| الملف | الوصف |
|---|---|
ucode_rom.h | مخزن برمجيات دقيقة 512×48 بت (PROMs ثنائي القطب)، مبني على Bitsavers Verilog والتفريغات. تتحكم كل كلمة دقيقة في ALU، السجل المؤقت، واجهة الناقل، والتفرع لدورة دقيقة واحدة. |
combo_roms.h | ذواكر ROM توافقية (E51-E83, E107)، فك ترميز IR (E59/E60/E63/E69/E70/E71/E74)، اختيار وظيفة ALU (E61/E82/E83)، منطق أولوية المصيدة/الخدمة (E52/E53)، ومنطق كود الحالة (E68/E107)، جميعها أعيد تشكيلها من المخططات والتسجيلات المنطقية. تتصل ذواكر ROM ذات المجمع المفتوح (open-collector) بناقل MPC عبر وصل "OR" سلكي. |
kd11ea.c | محرك مسار البيانات. يتقدم عبر البرمجيات الدقيقة كلمة دقيقة واحدة لكل دورة. يتم محاكاة بوابات 74xx الأساسية باستخدام معاملات المنطق في C (!, &&, >> إلخ). تم تصميم ALU ذو الشريحة 74S181 بالكامل (4 شرائح، 16 بت). |
mmu.c | إدارة الذاكرة. مساحات عنوان kernel/مستخدم، إعادة تموضع 18 بت (3 جامعات 74S283)، 16 زوج PAR/PDR، مسجلات إحباط SR0/SR2 مع منطق التجميد. |
clockgen.c | مولد الساعة. يمثل خط التأخير E106 (تغذية راجعة TAP 30/90/120، حجز ناقل TRAN INH). دورات قصيرة: 180 نانوثانية، دورات طويلة: 240 نانوثانية، تمتد عمليات نقل الناقل حتى عودة SSYN. |
clock.c | ضبط الوقت الفعلي. يحافظ على توافق الوقت المحاكى مع وقت الساعة الحقيقية. |
int.c | محكم المقاطعة. قائمة أولوية BR4-BR7، تقرب ترتيب منح سلسلة الأقحوان (daisy-chain) في UNIBUS. |
تحاكي مفاتيح اللوحة الأمامية والمؤشرات للحاسوب PDP-11/34A. نشطة عندما تكون وحدة المعالجة متوقفة (تشغيل الطاقة، تعليمة HALT، أو Ctrl-P).
تسمح بتهيئة الناقل، إقلاع وحدة المعالجة، التنفيذ خطوة بخطوة، فحص وإيداع بيانات في عناوين عشوائية، والخروج من المحاكي.
الواجهة الأمامية منفصلة عن المحرك، لذلك تتوفر أيضاً واجهة رسومية واقعية للوحة الأمامية بلغة WebAssembly.
توفر وحدة التحكم في التصحيح مصححاً تفاعلياً لكل من مستوى البرمجيات الدقيقة ومستوى التعليمات:
s [n]: تنفيذ خطوة واحدة لعدد n من التعليمات الدقيقة مع تفريغ كامل للحالة (MPC, ALU, ناقل, مسجلات)b addr: تعيين نقطة توقف PC (ثماني)، bl لعرض القائمة، bd n للحذفg: استئناف التنفيذu [addr] [n]: فك تجميع التعليماتc [addr] [n]: تفريغ الذاكرة (ثماني)mmu: عرض حالة MMU (PAR/PDR لـ kernel والمستخدم، تمييز الوضع الحالي)r: تفريغ المسجلاتكان استكشاف أخطاء ll-34 أثناء تطويره مشابهاً جداً لاستكشاف أخطاء العتاد الحقيقي لدرجة أنه تم تنفيذ محلل منطقي داخلي لتتبع الإشارات وفحص مسار البيانات. أثبت ذلك أنه حاسم في تعقب أخطاء ذواكر ROM والتوقيت الدقيقة في وحدة المعالجة الافتراضية. يمكن استخدامه أيضاً كمرجع لاستكشاف أخطاء العتاد الحقيقي، تماماً كما ساعد العتاد العامل في تطوير المحاكي.
يسمح محلل المنطق بفحص 102 نقطة على إشارات وحدة المعالجة الرئيسية، مرسومة إلى دبابيس الشرائح الفعلية (ترميز KD1:Exx:pin المطابق لمخططات DEC K1-5 حتى K2-9). يتم توفير أسماء مستعارة منطقية (MPC, ALU_OUT, IR, PSW…) لسهولة الاستخدام.
معدل العينة هو ساعة وحدة المعالجة الفعلية (5,555,556 هرتز) بدقة 180 نانوثانية لكل عينة. يقلل مقسم قابل للتكوين معدل العينة لنوافذ أخذ عينات أطول.
تستخدم عمليات الالتقاط مخزناً حلقيًا (حتى 64K عينة) مع مشغل قابل للتكوين على أي إشارة، وموضع مشغل قابل للتعديل (نسبة قبل/بعد)، وتصدير CSV للتحليل دون اتصال.
تم استخدام عمليات التقاط المنطق بحرية في جميع أنحاء المشروع لرسم خرائط وتصحيح مسارات تعدد الإرسال غير المفهومة جيداً.
يأتي ll-34 مع بعض البرامج والأنظمة لتجربتها: لعبة "Game of Life"، وV6 UNIX، وRT-11 V4 مع لعبة Tetris الأصلية، وATTN/11، وهو محول Transformer صغير قابل للتدريب مع آلية الانتباه الذاتي.
./ll-34 --rk ./wasm/demos/rtv4_rk.dsk
سيقوم ذاكرة ROM الإقلاع بتحميل النظام تلقائياً من RK11 وبدء تشغيل نظام التشغيل.
سيعرض DIR قائمة الملفات، وسيطبع HELP المساعدة، وسيبدأ RUN TETRIS عرض Tetris (على الرغم من أن $TERM ربما سيكون خاطئاً؟).
سيبدأ RUN ADVENT لعبة Colossal Cave Adventure، المبنية على PDP-11/34 حقيقي.
./ll-34 --rk ./wasm/demos/v6bin.rk
سيقوم محمل الإقلاع بطباعة موجه @ مصغر. اكتب rkunix واضغط Enter، وبعد بضع ثوانٍ يجب أن تحصل على موجه login:. أدخل اسم المستخدم root بدون كلمة مرور وستكون في النظام! ملاحظة: cd يسمى chdir في الإصدارات المبكرة من Unix.
make + مترجم C11، لا توجد تبعيات أخرى.
متحقق من التجميع بدون تحذيرات على Linux (x86_64 و aarch64) مع كل من musl و glibc، macOS aarch64، و NetBSD 10 aarch64.
بالإضافة إلى واجهة سطر الأوامر، تتوفر نسخة WebAssembly مستقلة بواجهة رسومية واقعية هنا: https://dbrll.github.io/ll-34.
ملاحظة: ll-34 هو محاكي كثيف الاستخدام للموارد. على عكس محاكيات مستوى التعليمات، فهو يتقدم عبر البرمجيات الدقيقة دورة واحدة في كل مرة ويقوم بتشغيل ALU، ذواكر ROM التوافقية، السجل المؤقت، مولد الساعة، وتوقيت الناقل في كل خطوة. يجب أن يحافظ المضيف على وتيرة مولد الساعة 5.5 ميجاهرتز بشكل مستمر ليبقى دقيقاً من حيث الدورة.
عند بدء التشغيل، يقوم المحاكي بإجراء تقييم لأدائه ويبلغ عن سرعته مقارنة بـ KD11-EA حقيقي. النسبة أقل من 1x تعني أن المضيف لا يستطيع اللحاق بالتوقيت الفعلي وأن دقة التوقيت غير مضمونة. التقييم غير متوفر في إصدار WebAssembly، حيث أن دقة مؤقت المتصفح تجعله غير موثوق. نظراً لأن بناء WASM أبطأ من الأصلي (native)، فإن تشغيله على هاتف ذكي سيكون عادةً بطيئاً جداً.