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

هذه مجموعة من الإجراءات الحسابية على أرقام حقيقية. لا يمكن للمعالج الدقيق (6502 ، كما هو الحال في Apple I و II) أن يعمل مع وحدات البايت فقط ، أي الأعداد الصحيحة بين 0 و 255. والأسوأ من ذلك ، يمكنه فقط إضافتها وطرحها. ولكن مع هذه المكتبة يمكنك حساب

، أو حتى تأخذ الجذر التربيعي لل pi. من المثير للدهشة أن مؤلف البرنامج المسمى Steve Wozniak يناسب الوظائف الرئيسية (الجمع والطرح والضرب والقسمة) إلى 239 بايت ، باستخدام ما مجموعه 127 تعليمات.
هذه قطعة رائعة من البرمجة. بعد قراءتها عدة مرات ، يمكنني القول إنه ببساطة رائع. على سبيل المثال ، يتم تشغيل دورات إجراءات الضرب والقسمة 23 مرة ، مرة واحدة لكل بت في النتيجة. هل تعتقد أن Woz سينفق وحدتي بايت في كتابة ثابت 23 في كلا المكانين؟ بالطبع لا! يتم تحميل الثابت 23 في الروتين الأولي الذي تستخدمه كلتا الحلقات:

كمثال آخر ، يجب أن تأخذ الخوارزميات القيم المطلقة لكل من M1 و M2. هل يمكن أن تكتب
M1 = القيمة المطلقة (M1) ؛
M2 = القيمة المطلقة (M2) ؛
Woz لا يكرر مثل هذا. يكتب
أحد الإجراءات التي تأخذ القيمة المطلقة لـ M1 ، ثم يغير M1 و M2. ثم يستدعي هذا الإجراء
مرتين ، وبالتالي يتم تحقيق نفس النتيجة بنصف مقدار الكود. علاوة على ذلك ، هناك حاجة أيضًا إلى استبدال M1 و M2 في مكان آخر ، لذلك يقوم الكود بعمل مزدوج.
بالطبع ، مثل هذا العوملة المكثفة يجعل من الصعب تتبع التدفق ، لكن من المدهش إلى أي مدى يسبق هذا الرمز وقته. عند قراءة مقالات أخرى في إصدار عام 1976 ، يمكنك العثور على الكثير من التعليمات البرمجية غير المكتوبة جيدًا. هذا أمر مفهوم: لقد اكتشف الناس للتو كيفية الاستفادة من المعالجات الدقيقة الجديدة. وفي خضم كل هذا الماس ، والذي قد يكون جديراً بالمتطفل الحديث من الديموسين. للمقارنة ، هنا هو نفس المستوى من الإبداع الكلي كما هو الحال في
رمز 6502 المدهش بعد 30 عامًا.
ما يكفي من القصة. لماذا أدرس بعناية هذا الرمز القديم في عام 2019؟ الحقيقة هي أنني أعمل على رفيق جديد لـ
I²CDriver و
SPIDriver ، وكان عليه إجراء عمليات الفاصلة العائمة على المعالج 8 بت Silicon Labs EFM8 (على أساس 8051) ، والذي استخدمته في المشاريع السابقة. الآن تنفذ هذه الحسابات بسهولة ، تمامًا مثل مكتبة 6502. لم أكن بحاجة إلى مثل هذا الرمز الصغير والمحسن ، لكن الآن يعمل بسرعة كبيرة ، أسرع قليلاً من
مكتبة Keil المشابهة . رمز كبير لا يموت!