"ستكون القناة" F "الرئيسية مثل برمجة العفاريت عبر لاعبي الأجهزة ..."
/ chadtower، منتدى atariage /
ظهرت وحدة لعبة
Fairchild Channel F ، والمعروفة أيضًا باسم VES ، في نوفمبر 1976. على عكس سابقاتها ، مثل Ping-Pong ، Tennis (في نفس الصف - "Video Sport" السوفياتي) ، كان هناك اختلاف كبير للغاية - وجود معالج دقيق وخراطيش مع البرامج. قبل ذلك ، تم تنفيذ الألعاب في لوحات المفاتيح على أساس منطق صارم - كان البرنامج ، بالمعنى الحديث ، غائبًا هناك.
صدر فيرتشايلد القناة F حتى عام 1983. خلال هذا الوقت ، تم بيع أكثر من ربع مليون وحدة من هذه المفاتيح وتم إصدار حوالي 30 إلى 40
لعبة ،
بعضها بالفعل في 2000s.
عند الحديث عن التفوق من حيث استخدام المعالج الدقيق ، تجدر الإشارة إلى أن RCA Studio II ، الذي تحدثت عنه في مقالة سابقة ، تأخر شهرين فقط ، لكن تبين أنه أضعف بكثير من القناة F ، ولهذا السبب فشلت في المبيعات. ومع ذلك ، فإن المظهر ، بعد أقل من عام ، Atari VCS - واستبدل القناة F. من السوق.
تطوير Fairchild_Channel_F ، على هذا النحو ، لم يكن. في النظام II والعديد من الحيوانات المستنسخة ، مثل Saba Videoplay 2 (1979) ، كانت الاختلافات أساسًا في الحالة ، وعصا التحكم (بالمناسبة ، فهموا جميعًا ، بغض النظر عن المواضع المعتادة ، وتدوير المقبض) وعدد الرقائق. من الناحية المعمارية ، كان كل شيء متطابقًا تقريبًا.
ما هي القناة F؟
معالج
تم إنتاج المعالج ، في تقاليد العصر ، من قبل شركة فيرتشايلد نفسها كوحدة التحكم نفسها ويسمى F8
en.wikipedia.org/wiki/Fairchild_F8 . هذا معالج ذو 8 بتات من عام 1974 ، يعمل بتردد 1.8 ميجاهرتز (تستغرق إحدى التعليمات من 1 إلى 6 دورات على مدار الساعة).
ومع ذلك ، يمكن استدعاؤها بمعالج دقيق فقط بامتداد ، نظرًا لأن هذا المعالج يتكون من شريحتين - جهاز حوسبة 3850CPU يحتوي على ALU ، بطارية ، 64 بايت من SRAM ، والمنطق اللازم لتنفيذ التعليمات ، منفذين (لا يوجد ناقل عنوان!) و 3851PSU (قابل للبرمجة) وحدة التخزين) ، التي تحتوي على 1 كيلوبايت من ذاكرة القراءة فقط (تستخدم لنظام BIOS) ، مؤشر تعليمات ، أنظمة معالجة الذاكرة ، المقاطعات ، مؤقت مؤقت (لا يتم استخدام المقاطعات وجهاز ضبط الوقت على وجه التحديد في القناة F).
في وقت لاحق ، ظهرت رقاقة F3859 ، التي جمعت بين وحدة المعالجة المركزية وجامعة الأمير سلطان على نفس الشريحة و Mostek 3870 - نسخة محسنة قليلاً ، صدرت حتى التسعينيات. ومع ذلك ، هذه قصة أخرى. ومن المثير للاهتمام ، في بعض الأحيان تسمى F8 متحكم دقيق (على وجه الخصوص ، بسبب وجود جهاز توقيت والموانئ) ويشار إليها على أنها سلف عائلة Intel MCS-48 (8048).
بالإضافة إلى القناة F ، تم استخدام معالج F8 أيضًا في كمبيوتر
VideoBrain وفي كمبيوتر
CompuChess للشطرنج. بشكل عام ، من المدهش أن هناك القليل جدًا من المعلومات حول هذا المعالج. باستثناء بضع أوصاف من Fairchild والكود المصدري للعديد من الألعاب والأمثلة على وجه التحديد للقناة F ، لا يوجد شيء آخر. يبدو أن هذا المعالج لم يستخدم في أي مكان آخر ، وهو أمر لا يصدق (بالنظر إلى أن إصداراته المتقدمة قد تم إصدارها لبعض الوقت). سأفترض أن جميع الأجهزة الأخرى التي استخدمت فيها كانت لأغراض عسكرية.
الآن قليلا عن ميزات المعالج. التفكير في مجموعة ووظائف سجلاتها. أعتقد أن هذه واحدة من أكثر البنى حيرة التي كانت موجودة في ذلك الوقت (ربما من الممكن أن تمتد البنى الحديثة ، لكن المقارنة ستكون غير صحيحة ، لأنها مصممة للمترجمين. عمل الأشخاص الأحياء مع F8).
هناك الكثير من السجلات في المعالج. بالإضافة إلى البطارية 8 بت A وسجل العلم W (I ، O ، Z ، C ، S) ، هناك أيضًا "scratchpad" - 64 خلية ذات 8 بتات مع وظائف مختلفة.
تُستخدم الخلايا التسع الأولى كقوائم للأغراض العامة R0-R8 في أوامر مثل 'a، 7 "(قم بتحميل محتويات السجل R7 في البطارية). لاحظ أن الحرف R غير موضح - فقط رقم التسجيل مكتوب. ما هو المقصود بالضبط ، الرقم أو يجب أن يكون الرقم واضحًا من السياق ، فقل أنه في حالة تعليمات lr ، ببساطة لا يمكن أن يكون هناك أرقام ، وإذا كان ، على سبيل المثال ، "li 7" (قم بتحميل ثابت في البطارية) ، فهذا بالضبط رقم وليس تسجيلًا.
تم تصميم الخلايا 9 و 10-11 (H) و 12-13 (K) و14-15 (Q) لحفظ السجلات الأخرى في المواقف المختلفة ، مثل استدعاء البرامج الفرعية.
لا يمكن الوصول إلى السجلات R16-R63 إلا من خلال سجل فهرس ISAR خاص (سجل عناوين Scratchpad غير المباشر) ، حيث توجد ستة مخازن مؤقتة من ثمانية بايت يتم تشكيلها من الخلايا 16-23 و24-31 و32-39 و40-47 و 48-55 و 48-55 و 56-63 .
يتم تقسيم ISAR المكون من ستة بت إلى قسمين من 3 بتات. عند زيادة أو خفض ISAR بمقدار واحد ، تتأثر فقط الأجزاء الثلاثة الأقل - أي يتم تنفيذ العنونة في أحد المخازن المؤقتة الستة المكونة من ثمانية بايت المذكورة (في الوقت نفسه ، يمكن تتبع نهاية المخزن المؤقت بتعليمات الفرع الشرطي br7 الخاصة).
clr ; 0 -> A ; set ISAR to full address Ox27 (octal 27) lisu 2 ; buffer N2 lisl 7 ; index within buffer N2 loop: lr d,a ; A-> buffer N2[index], than decrement ISAR (27, 26, 25, ... ) br7 loop ; go further if low part of ISAR contains 7 (end of buffer N2). if not, go loop again
في هذه الحالة ، فإن "d" في التعليمة "lr d، a" ليست اسم السجل ، بل هي إشارة إلى أن ISAR سوف تحتاج إلى تخفيض ("i" - الزيادة ، "s" - ترك دون تغيير).
هناك طريقة أخرى لمعالجة غير مباشرة - من خلال سجل DC0 (عداد البيانات):
dci data_addr ; data_addr -> DC0 lm ; [data_addr] -> A, DC0 + 1 -> DC0 ... data_addr: db 0,1,2,3,...
إذا كنت بحاجة إلى نقل البيانات من منطقة ذاكرة إلى أخرى ، فسيتم استخدام الأمر xdc أيضًا ، حيث يتم تبديل محتويات السجلين DC0 و DC1. أي نقرأ من العنوان المشار إليه بواسطة DC0 ، ثم نقوم xdc والكتابة إلى العنوان الذي يشير إليه DC1 الآن. ثم مرة أخرى XDC ، الخ أي DC1 هو نوع من سجل الظل لتخزين نسخة من DC0. من المستحيل الوصول إليه مباشرة (باستثناء الأمر xdc).
توضح الأمثلة أعلاه جزءًا فقط من الاحتمالات فيما يتعلق بالتصدي ، في الواقع ، هناك الكثير منها.
يوجد أيضًا في F8 أربعة منافذ - 0،1،4،5 ، والتي يمكنك الكتابة باستخدام الأمر out والقراءة باستخدام الأمر in. في القناة F ، تُستخدم المنافذ لإخراج الرسومات والصوت وقراءة حالة عصا التحكم.
لن أتطرق إلى التعليمات الأخرى مثل الحساب والانتقالات وما إلى ذلك - فهي قياسية إلى حد ما. ألاحظ فقط أن اختيار السجلات التي يمكنك من خلالها تنفيذ الإجراءات محدود للغاية ، وبالتالي فإن الرمز ينمو بسرعة بسبب الحاجة إلى نقل القيم باستمرار جيئة وذهابا.
لا يوجد الطرح (لا يوجد سوى إضافة). تعليمات التناقص (ds) والزيادة (inc) لكل وحدة غير متماثلة. س يعمل فقط مع سجلات r0-r8 ، المؤتمر الوطني العراقي - فقط مع البطارية.
القفز غير المشروط يفسد البطارية.
مثال على حلقة عادية:
li 25 ; (r4) number of iterations lr 4,a next: ds 4 ; r4-- bnz next ; until r4 == 0
الوظائف الفرعية
نظرًا لأن F8 لا يحتوي على مكدس أجهزة ، فهناك صعوبات في مكالمات البرامج الفرعية المتداخلة. تبدو المكالمة العادية والعودة كما يلي:
; ...code pi sub ; Pushes address of next instruction to PC1 ; address of sub is stored in PC0 (jump to subroutine) ; ...code continues sub: ; ... often used code pop ; Move return address from PC1 to PC0
هنا PC0 هو مؤشر تعليمات العادية. PC1 - ما يسمى "سجل مكدس". لا علاقة له بالمكدس ، فقط يتم حفظ PC0 فيه عندما يتم استدعاء الروتين الفرعي.
إذا تم استدعاء روتين فرعي آخر من العنوان الفرعي ، يتم استبدال عنوان المرسل ويحتاج إلى التعقيد (احفظ عنوان المرسل الأول في السجل K):
prog: ; ...do something... pi sub1 ; Address of next instruction stored in PC1 ; sub1 is stored in PC0 (jump to subroutine) ; ...do more... sub1: lr k,p ; Copy PC1 to K, original jump address to K ; ...do something... pi sub2 ; Pushes address of next instruction to PC1 ; sub1 is stored in PC0 (jump to subroutine) ; ...do more... pk ; Store address of next instruction in PC1 ; Copy value in K to PC0 (jump back to main) sub2: ; ...do something... pop ; Move return address from PC1 to PC0
إذا كنت تحتاج أيضًا إلى مستوى ثالث من التعشيش ، فسيصبح كل شيء محزنًا تمامًا (في BIOS لهذا يوجد حتى روتينان خاصان - pushk و popk).
التوصية العامة هي محاولة استبدال المكالمات الفرعية مع وحدات الماكرو. بالطبع ، إذا لم تكن هناك قيود صارمة على حجم الرمز.
لا يوجد مكدس الأجهزة في F8. إذا لزم الأمر ، يتم تنفيذه برمجيا - من خلال ISAR والمخازن المؤقتة.
الكتابة إلى ذاكرة الوصول العشوائي ليست ذات صلة كبيرة (لعدم وجود واحدة) ، لكنها تبدو كما يلي:
li $FF ; set value dci $3800 ; set target address st ; write
الذاكرة
على الرغم من أن هذا يبدو غريبا بعض الشيء ، لا توجد ذاكرة الوصول العشوائي في فيرتشايلد القناة واو لا يتم عرض كيلو بايت الموجودة من ذاكرة الفيديو (MK4027) في مساحة العنوان ، وهي في الواقع ليست قابلة للقراءة ، تتم كتابتها من خلال المنافذ. سجلات المعالج الدقيق ، حتى 64 ، بالكاد تعتبر صحيحة لذاكرة الوصول العشوائي.
يتم تخزين البرنامج القابل للتنفيذ في خراطيش ROM قابلة للإزالة ، وغالبًا ما تبلغ سعتها 2 كيلو بايت (تستخدم بعض الألعاب الحديثة خراطيش 3K و 4 K و 5 K). بالإضافة إلى ذلك ، هناك شريحة معالج مدمجة ، 1KB ROM ROM ، تحتوي على لعبة بسيطة مثل التنس ، وهما روتينان مفيدان وصور من عدة شخصيات.
في مساحة العنوان ، يقع BIOS من 0000 دولار إلى 07 دولارًا ، وذاكرة الوصول العشوائي للخرطوشة - من 0800 دولار.
الرسومات
تعتبر قدرات القناة F الرسومية بدائية للغاية ، لأنه ببساطة لا توجد وحدة تحكم فيديو في شكل شريحة منفصلة هناك - يتم تنفيذ كل شيء وفقًا للمنطق المعتاد مثل سجلات التحويل والبوابات ومكبرات الصوت التشغيلية. من غير المعتاد أن تذكر المصادر المختلفة قرارات مختلفة ، وهناك العديد من الخيارات. والحقيقة هي أن 2 كيلو بايت من ذاكرة الفيديو ينطوي على دقة 128 × 64 ، ولكن في الواقع هذا أبعد ما يكون عن القضية. أولاً ، يعتمد الكثير على مساحة الصورة التي يتم تشكيلها على هذا التلفزيون المعين المرئي (نظرًا لعدم استخدام الأعمدة الأربعة الأولى رسميًا على الإطلاق). ثانياً ، يتم استخدام الأعمدة القليلة الأخيرة أسفل اللوحة. ثالثًا ، لا يتم استخدام جزء من الذاكرة على الإطلاق.
ونتيجة لذلك ، يمكن تقدير الدقة الفعلية تقريبًا 95 × 58 بكسل بألوان 8 (والتي ، على الرغم من ذلك ، أفضل بكثير من RCA Studio II مع 64 × 32 بالأبيض والأسود).
يتم إصدار معظم لوحات المفاتيح في إصدار NTSC ، ولكن PAL موجود أيضًا. لا توجد اختلافات عملية ، كما يقولون (عدد الخطوط هو نفسه).
بشكل أساسي ، يسمح لك هذا المكواة البسيطة برسم نقاط على الشاشة. على الرغم من أن إجمالي عدد الألوان المعروضة هو 8 ، إلا أنه يمكن عرض أربعة فقط في سطر واحد (يمكنك استدعاء هذه اللوحة بشكل تعسفي). يتم تعيين لوح الألوان بشكل فردي لكل سطر ، ويتم تخزينه في مكان غريب إلى حد ما - في العمودين 125 و 126 من كل سطر (وهو في أي حال خارج المنطقة المرئية). يتم تغيير اللوحة ، على التوالي ، عن طريق رسم وحدات البكسل في هذين العمودين.
(يتم تمييز منطقة ذاكرة الفيديو المرئية فعليًا على الشاشة والمنطقة التي تم ضبط اللوحة فيها باللون الأصفر)
كما ذكر أعلاه ، هناك طريقة واحدة فقط لكتابة البيانات إلى VRAM - من خلال المنافذ. يشير هذا إلى اللون ، العمود ، الصف:
تتم كتابة X إلى المنفذ 4 ، Y إلى المنفذ 5 ، واللون إلى المنفذ 1 ، وبعد ذلك يتم نقل البيانات عن طريق كتابة ثابت إلى المنفذ 0:
; set color (2 bit per pixel) li $00 ; color ($00 = green, $40 = red, $80 = blue, $C0 = background) outs 1 li 104 ; X com outs 4 ; set the row li 61 ; Y com outs 5 ; transfer data to VRAM li $60 outs 0 li $50 outs 0 ; wait for update lis 6 delay: ai $ff bnz delay
مطلوب تأخير حتى يتسنى تسجيل كل شيء ، وإلا فقد لا يتم رسم النقطة التالية. في الإصدار الرسمي ، لا يزال 4 يضاف إلى العمود والصف (تم حذفه للبساطة)
يستغرق ملء الشاشة بالكامل بالنقاط (في حلقة) حوالي ثانية. من المهم ملاحظة أنه بالإضافة إلى التحديث البطيء للغاية للشاشة ، هناك أيضًا حقيقة أنه لا توجد وسيلة لانتظار عودة الحزمة عبر الإطار. تبعا لذلك ، حتى يصاحب إعادة رسم صغيرة من قبل وميض.
الآن عن لوحة. بالمعنى الدقيق للكلمة ، يوجد في كل سطر وضعان - أبيض وأسود (عندما تكون الخلفية سوداء وتكون المقدمة بيضاء فقط ، بغض النظر عن البيكسلات المرسومة) واللون.
في وضع اللون الأمامي ، يوجد دائمًا ثلاثة ألوان - الأحمر والأخضر والأزرق (rgb). بالإضافة إلى واحد من ثلاثة ألوان الخلفية - الرمادي والأزرق الفاتح والأخضر الفاتح.
لتعيين اللوحة في العمودين 125 و 126 ، اكتب القيم التالية:
x=125 x=126 palette --------------------------------------------------------------------- 00 00 COLOR: rgb, light green bg 00 ff COLOR: rgb, light blue bg ff 00 COLOR: rgb, gray bg ff ff B/W: www, black bg
في الألعاب النموذجية ، عادة ما يقومون بذلك: أولاً ، يقومون بتعيين خلفية عامة معينة ، والتي يمكنك من خلالها استخدام إجراء BIOS الجاهز:
li $c6 ; $21 - b/w palette, fill with black. $c6 - color palette, fill with gray lr 3, A pi clrscrn ; clrscrn BIOS call
ثم ، إذا لزم الأمر ، قم بعمل شريط به لوحة سوداء وبيضاء (على سبيل المثال ، لعرض نقاط اللعبة بأرقام بيضاء على خلفية سوداء)
ثم يضعون وحدات البكسل في واحد من ثلاثة ألوان (إذا كانت الخلفية رمادية ، على التوالي - r ، g ، b). نتيجة لذلك ، هناك بالطبع 8 ألوان ، ولكن لوضع نقطة تعسفية في مكان معين أمر سهل للغاية - إنه مستحيل.
فيما يلي مجموعة من الصور التي تعطي فكرة عن الألوان ومجموعاتها.
في الواقع ، على كل هذه الرسومات ، على هذا النحو ، نهاية - كل ما تريد القيام به يتم عن طريق رسم بكسل ، ويدويا. من إجراءات مفيدة ، يحتوي BIOS على إخراج الأحرف. ومع ذلك ، لأسباب تتعلق بتوفير مساحة ، توجد في ROM فقط صور للأرقام والأحرف الفردية ، بحجم 5 × 8 بكسل:
ومع ذلك ، فإن إجراء السحب مفيد ويمكن استخدامه كما يلي:
li 25 ; column lr 1,a li 25 ; row lr 2,a li %11000000 ; eg $c0 - green "0" lr 0,a ; a -> r0 pi drawchar ; call subroutine
في الإصدار أعلاه ، يحدد الرقمان العلويان في السجل r0 اللون (10 - أحمر ، 11 - أخضر ، 01 - أزرق ، 00 - شفاف) ، والباقي - الرقم التسلسلي للشخصية (0 1 2 3 4 5 6 7 8 9 G؟ T SPACE MX BLOCK: - center || left || `) ، بدءًا من الصفر. يتم وضع السجلات r1 و r2 ، على التوالي ، عمود وصف.
خيار عملي أكثر هو عدم التفكير في البتات:
li 20 ; x lr 1,a ; a -> r1 li 10 ; y lr 2,a ; a -> r2 li $40 ; char color in bits 6,7: $80 (%10000000) - red, $c0 (%11000000) - green, $40 (%01000000) - blue, $00 (%00000000) - transparent oi 1 ; index of char ( eg 3 for "3" ) lr 0,a ; combined color + char index -> r0 pi drawchar ; call subroutine
للتعرف على المنصة ، كتبت
مقدمة 256 بايت لمسابقة المقدمة الصغيرة في
Chaos Constructions'2019 . لا شيء خاص ، لكن عليك الانتباه إلى سبب استخدام تغيير لوح الألوان سطريًا هناك. الشريط الأفقي الزاحف ، كما كان ، يسلط الضوء على الخط الموجود تحته ، مع استبدال الخلفية بأكملها مؤقتًا باللون الأسود ، وجميع البيكسلات باللون الأبيض. نظرًا لأنك لست بحاجة إلى استبدال وحدات البكسل نفسها (ولا تحتاج إلى استعادتها لاحقًا) ، يمكنك جعل هذه "الإضاءة الخلفية" سريعة جدًا ودون وميض.
النقطة الثانية هي الأحرف "CC". نظرًا لأن الحروف "C" ليست في نظام الإدخال / الإخراج الأساسي ، يتم استخدام تداخل الحروف GG والرقم 1 للحصول على معكوس "CC".
الصوت
الصوت سيء. رسميا ، هناك ثلاثة أصوات - 120Hz و 500 هرتز و 1 كيلو هرتز. في الواقع ، الحصول على شيء آخر غير النقرات والصرير المختنق يمثل مشكلة. بالإضافة إلى ذلك ، يقولون أنه بين آلات PAL و NTSC ، وكذلك بين الإصدارات القديمة والجديدة ، يختلف الصوت أيضًا. ومع ذلك ، بالنسبة للألعاب النموذجية - هذا يكفي. الصوت وإيقافه عبر المنافذ:
li %01000000 ; 1khz beep $40 outs 5 li %10000000 ; 500hz beep $80 outs 5 li %11000000 ; 120hz beep $c0 outs 5 ; some pause clr outs 5 ; turn off sound
كان الناس يستمتعون بلعب الموسيقى.
أفضل العينات تشبه جهاز الكمبيوتر عن بعد. صحيح ، لا يوجد أي معنى عملي على أي حال - جميع موارد المعالج تذهب إلى الموسيقى ، لا شيء خاص يمكن القيام به.
أدوات التطوير
يوجد حاليًا مجموعة
جاهزة من البرامج الضرورية تسمى "حزمة التطوير".
يتضمن هذا مجمّع DASM ، disassembler ، محاكي MESS (مع مصحح الأخطاء). كل هذا يعمل دون مشاكل على الأقل تحت ويندوز 7.
معلمات التجميع وبدء التشغيل:
dasm.exe test.asm -f3 -otest.bin messd channelf -cartridge %cartPath%\test.bin -w -effect sharp -r 640x480 -ka
المحاكي جيد جدًا ، على الرغم من أن المصحح هناك غريب للغاية. لم أتمكن من تهيئة الإصدار الجديد من MAME / MESS على الفور (لاحظت أن إعداد MAME لمنصة غير شعبية يفترض أنها تدعمها مهمة غير تافهة في كل مرة).
يفترض المحاكي أن دقة المنطقة المرئية تتوافق مع minx = 5 ، miny = 5 ، maxX = 105 ، maxY = 61
نظرًا لعدم وجود متعة في كتابة شيء ما تحت المضاهاة دون اختبار النتيجة على الهواء مباشرة ، كان عليّ حل مشكلة مضاهاة ROM. بناءً على طلبي ، صنعت
tnt23 خرطوشة خاصة (قام ألكساندر
نوفوزيلوف بطباعة غلاف خاص بها) تم إدخال EEPROM 28C16A فيه. نظرًا لخصائص معالجة F8 ، لا يزال يتعين علي شراء شريحة Fairchild 3853 القديمة على eBay ، ونتيجة لذلك ، أصبح من الممكن ، من خلال برمجة EEPROM ، لمعرفة كيف يبدو الرمز على آلة حية.
بالإضافة إلى ذلك ، قام tnt23 بتوصيل مخرج القناة S-Video (عادة ما يمكن توصيله فقط بالتلفزيون عبر مدخل الهوائي) ، مما أدى إلى تحسين جودة الصورة واستنساخ الألوان بشكل كبير.
قصة عن قناة فيرتشايلد F:
موارد