في يناير 2020 ، بدأت الاستعدادات للمشاركة في حزب Forever 2020 demoparty. تم الإعلان عن موضوع الكومبو من قبل ROBO ، لذلك قررت كتابة عمل بسيط لـ Atari 65XE. عندما كانت المقدمة جاهزة ، قررت إضافة تأثير الصورة النقطية. للأسف ، بسبب إلغاء Forever ، تم نشر جزء من المقدمة.معالج Atari هو MOS 6502 - تسجيلات 8 بت ونقص المنافذ للوصول إلى الأجهزة. مكون آخر للكمبيوتر هو ANTIC - يقوم بتنفيذ الصور - الألوان ، أوضاع الفيديو ، الرموز. هناك خلايا أجهزة للوصول إلى ANTIC ، ويتم وصف الغرض منها في رسم الخرائط أتاريلن أقوم بإدراج جميع عناوين الخلايا والوجهة ، سأصف فكرة التأثير نفسه. وتجدر الإشارة إلى أنه من أجل الراحة ، فإن العناوين في Mapping لها أساليب تقوية - فهي مريحة جدًا للتذكر.ما هي الشاشة؟ في وضع النص ، يمكن رؤية مستطيل برموز وإطار.للراحة ، يمكنك إيقاف تشغيل المستطيل بكتابة القيمة 0 إلى 559. كما ترى ، هناك مساحة لتأثير النقطية.الآن تحتاج إلى مزامنة الرسم مع الإخراج على الشاشة. هناك طريقتان:RTCLOK equ $0012
lda RTCLOK+2
waits
cmp RTCLOK+2
beq waits
هنا RTCLOCK هي ساعة الوقت الحقيقي التي تبدأ عند تشغيل الكمبيوتر. يزيد أولاً $ 14 ، ثم $ 13 و $ 12. إن فكرة التزامن بسيطة: قارن قيمة الخلية $ 14 بالقيمة الحالية. إذا لم تتطابق القيمة السابقة ، فهذا يعني حدوث مقاطعة.ولكن من وجهة نظري ، فإن الطريقة غير مناسبة ، لذا من الملائم استخدام عداد رأسي VCOUNT ($ D40B) للخطوط التي تم إنشاؤها على الإطار. سيكون انتظار بداية الإطار:ws
lda $D40B ; VCOUNT
bne ws
الفكرة نفسها هي كتابة قيم الألوان إلى سجل COLBK ($ D01A) - لون الإطار.تنقسم القيمة المكتوبة إلى السجل إلى قسمين: نوع اللون والسطوع ، محسوبًا بالنوع * 16 + السطوع. وصفت بالتفصيل هنا و هنا .ولكن عند تعيين اللون لكل سطر ، يلزم التزامن - كتابة أي قيمة إلى WSYNC (D40A) ستوقف المعالج وتجعله ينتظر حتى يبدأ السطر التالي. يتم استخدام نفس الطريقة في مقاطعات قائمة العرض.ينقسم التأثير نفسه إلى انتظار الإطار ، وتوليد قيم الألوان وكتابتها في السجلات الموصوفة. لقد استخدمت صفرًا من صفحات الصفحة للبساطة. يمكنك استخدام مجمع xasm لتجميع. org $4000
start
wait_frame
ws
lda $D40B ; VCOUNT
bne ws
LDY #0
STY 559
zz
LDA $CD
CLC
ADC #5
STA $CD
BCC BR1
INC $CE
BR1
ADC $CB
STA $CB
BCC BR2
INC $CC
BR2
LDA $CC
STA $D40A ; WSYNC
STA $D01A
INY
BNE zz
BEQ wait_frame
run start
اتضح 54 بايت. 54-6 (رأس البرنامج) = 48 بايت. هناك وقت للتجربة ، على سبيل المثال ، اللعب مع سطوع اللون الأخضر lda $CC
;*
and #$0f
ORA #$C0
;*
sta $D40A ; wsync
sta $D01A
خيارات أخرى لتوليد الألوان سأترك لأولئك المهتمين وتجربة أيديهم بنفسي. إنشاء وتجربة وإنشاء. هذا هو مثير جدا!