GEOS kaynak kodunu incelerken bazı pratik optimizasyon olanakları görünce yamadım birkaç yeri.
Bunlardan biri şu:
...
_Rectangle
LDA r2L
BNE Rect1
LDA r2H
CMP #$C7
BNE Rect1
LDA r3L
BNE Rect1
LDA r3H
BNE Rect1
JMP ClrScr
+MoveB r2L, r11L
Rect1 LDA r11L
...
Bunu src/kernal/graph.tas içinde ilgili yere ekliyoruz.
Görünüşe göre çoğu GEOS programı ekranı silmek için ekranın sol üst köşesinden sağ alt köşesine dikdörtgen çiziyor. Bu yukarıdaki yama işte bu durumu yoklayıp, durum buysa ClrScr rutinine geçiyor. Silmek dediğimiz işlemse aslında şu tırtıklı (#$55 #$AA ...) arkaplan deseni ile kaplama işlemi.
Hazır elimiz değimişken ClrScr rutinini de açarak hızlandırabiliyoruz:
ClrScr
LDY #$fa
LDA #$55
CLRLP STA $be45,Y
STA $bd4b,Y
STA $bc51,Y
STA $bb57,Y
STA $ba5d,Y
STA $b963,Y
STA $b869,Y
STA $b76f,Y
STA $b675,Y
STA $b57b,Y
STA $b481,Y
STA $b387,Y
STA $b28d,Y
STA $b193,Y
STA $b099,Y
STA $af9f,Y
STA $aea5,Y
STA $adab,Y
STA $acb1,Y
STA $abb7,Y
STA $aabd,Y
STA $a9c3,Y
STA $a8c9,Y
STA $a7cf,Y
STA $a6d5,Y
STA $a5db,Y
STA $a4e1,Y
STA $a3e7,Y
STA $a2ed,Y
STA $a1f3,Y
STA $a0f9,Y
STA $9fff,Y
DEY
BEQ CLREND
DEY
BNE CLRLP
LDY #$f9
LDA #$aa
BNE CLRLP
CLREND RTS
Bu iki değişiklik dahi program açıp kapama işleminde fark edilir bir hızlanma yaratıyor.
İlgili GEOS kaynak kodu ise şurada:
https://github.com/ytmytm/Başka birkaç optimizasyon olanağı daha var aslında. Onlar da sonraya kaldı artık...