تأثير البيانات النقطية لـ Atari 65XE

صورة

في يناير 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

خيارات أخرى لتوليد الألوان سأترك لأولئك المهتمين وتجربة أيديهم بنفسي. إنشاء وتجربة وإنشاء. هذا هو مثير جدا!

All Articles