1 Eylül 1987 Tarihli Commodore Gazetesi Sayfa 60

1 Eylül 1987 tarihli Commodore Gazetesi Sayfa 60
Metin içeriği (otomatik olarak oluşturulmuştur)

nin böyle artmayacağı besbelli. Şim- di geçen derslere dönüp indirekt in- deksli adresleme tipini hatırlayalım. Burada, asıl adres sıfırıncı sayfada- ki iki byte'lik göstergeç ve Y-registe- rinden elde ediliyordu. Bu kullanım- la göstergecin değerinin $100 artır- mak da mümkün hale geliyor. X-re- gisterinin 32 değeri ile karşılaştırılma- sı ve eşitsizlik durumunda 130'uncu satıra sıçraması için kullanmamız ge- reken komutları da hatırladınız her- halde?.. 100 - ;AD'YE $E000 DEĞERİNİ ALMA 110 - LDA : 0 120 - LDX # O0 130 - ETİKET2LDY ? O 140 - ETİKETIİ STA (AD),Y BNE ETİKETİ AD SAD 4 50100 İ GD 6Ü MERMETULYEL. 180 - INX 190 - CPX # 32 200 - BNE ETİKET2 İndirekt indeksli adreslemede, AD değişkeni iki byte'lık bir göstergeç ol- malı; yukarıdaki gibi absolut değer olmamalı. Sıfırıncı sayfadan kendi- mize uygun iki (boş!) byte bulmamız gerekmekte. $FA ve $FB adresleri, bu iş için ideal! Döngüye girmeden önce göstergecimiz $E000 değeri ile yüklenmelidir. Bunun için, düşük de- ğerli byte ($00) SFA'ya, yüksek de- ğerli byte ($E0) $FB'ye gitmelidir. Dikkatli okurlarımız hemen farket- miş olacaklardır; göstergecimizin de- Berini $100 artırmak için yüksek de- ğerli kısmı barındıran byte'ın değerini bir artırmak yetecektir. Programımı- zın sonuna bir de RTS ekledik mi, hiç bir eksiğimiz kalmayacak: 90- .BA $C420 100- LDA # < ($E000) Commodore 102- STA $FA 104- LDA# >(SE000) 106- STA $FB 110-LDA # Ü 120- LDX * O 130- ETİKET2 LDY ; O 140- ETİKETIİ STA ($FA),Y 150- INY 160- BNE ETİKETİ 170- INC $FB 180- INX 190- CPX # 32 200- BNE ETİKET2 210- RTS Bu parçanın, başlangıç adresi $C420'dir. Hatırlayacağınız gibi, ilk iki programımızın hemen arkasından gelen boş adresti bu. Programımızı assembler'dan geçirdikten sonra şöy- le bir görüntüye bürünür: C420 A9 00 LDA * $00 C422 85 FA STA $FA C424 A9 EOLDA # $E0 C426 85 FB STA $FB C428 A9 00LDA # $00 CASA A2 00 LDX # $00 C42C AO 00 LDY * $00 C42E 91 FA STA ($FA),Y C430 C8 INY C431 D0 FB BNE $C42E C433 E6 FB INC $FB C43İ5 E8 IİNX C436 E0 20 CPX # $32 C438 DO F2 BNE $C42C C43A 60 RTS Bu programı biraz daha kısaltmak mümkündür. Mesela, register'lerin hepsini ilk satırda sıfırlamak ve bu- nu transfer komutlarıyla yapmak (TAY, TAX gibi); bunlardan başka, döngünün içinde X-registerini 0'dan 32'ye değil de 32'den 0'a doğru geri- ye saydırırsak döngüden çıkmak için CMP — $00 komutuna gerek kalma- yacağı için, hem programın uzunlu- Bundan tasarruf edeceğiz, hem de kıs- men hız sağlayacağız. Fakat, bu de- Bişikliklerle programın veriminde gözle görülür bir artış sağlamayaca- Bi için bu değişiklikleri sadece öneri ve bilgi olarak bırakalım. İlk iki programımızın da o anda hafızada bulunduğunu varsayarak ufak bir deneme yapalım. Aşağıdaki satır şimdiye kadar yazdığımız prog- ramların bize güzel bir gösterisini ya- pacaktır: SYS50176:POKE 198,0:WAIT198, 1:5YS51208:POKE198,0:WAIT198, 1:5YS50192

Bu sayıdan diğer sayfalar: