Bu sayfadaki yazılar
Sayfanın metni
Sayfa 27
Co00 LDY #$ Fo C002 LDA #$ 21 CO04 STA $ 0400.Y
C007 RTS Birinci program ekranın sol üst köşesine, ikinci program ekranın sağ üst köşesine karakter depolar. İkiside çalışır çünki ekran hafızası 0400 bölgesinden başlar. INDEXED ADDRESSING Bu adresleme şeklinide sadece A registeri kullanabilir. Giriş olarak örneğimiz “STA ($32,X)' olsun. Bu girişte X=14 ise, LOW byte 46 bölgesindeki değer (32+14=46) ve HI byte 47 bölgesindeki değer olacaktır. Bundan sonra kompüter A registerini bu bölgede depolayacaktır. İşte örnek program: C000 LDX #$21 C002 STX $FB C004 LDX #$D0 C006 STX $FC C008 LDA #$00 C00A LDX #$01 C00C STA ($FB,X) C00E RTS Bu Assembly programını RUN ettiğin zaman zemin rengi değişecektir. X registerini LOW byte ile yükler. C002: LOW byte, FB bölgesinde saklanır. C004: X registeri HI byte ile yüklenir. C006: HI byte FC bölgesinde saklanır. C008: A registeri 00 ile yüklenir. C00A: X registeri 01 ile yüklenir. C00C: Kompüter LOW byte FB (FA+X) bölgesinden alır, sonra HI byte FC (FB+X+1) bölgesinden alır. Kompüterde D021 adresi oluşur ki bu zemin rengini tutan yerdir. Sonra A registeri rengi değiştirmek için oraya yüklenir, renk siyaha değişir. INDIRECT INDEXED ADDRESSING Bu şekil adreslemeyi yalnız A registeri kullanır. Bu şekil bir önceki adreslemeye benzer, sadece Y registerini index olarak kullanır ve Y registerini adres oluştuktan sonra ilave eder, önce değil.
İşte size ekranın sol üst köşesine karakter depolayan gösteri programı: LDX #$28 STX $FB C004 LDX #$04 C006 STX $FC LDY #$28 C00A LDA #$23 C00C STA ($FB),Y C00E RTS C000: Bu X registerini LOW byte'la yükler. C002: LOW byte FB bölgesinde şimdi depolandı. Şimdi X registeri HI byte'la yüklendi. HI byte FC bölgesinde depolandı. C008: Şimdi Y registeri (index) 28 ile yüklendi. C00A: A registeri 23 ile yüklendi. C00C: Kompüter LOW byte'ı FB, HI byte'ı FC bölgesinden alır. Sonra 0400. adres şekli oluşur, sonra Y ile toplanır ve 0428 olur. A registeri bu adrese saklanır. Bordür rengi D020 ve zemin rengi D021 bölgesinde kontrol edilir. Bu en son saklama komutu idi, öbür konuya geçmeden önce bir test vereceğim. İşte problem: Bordür rengini zemin rengine çeviren bir program yapabilir misin? Cevap: C000 LDA $D021 STA $D020 C006 RTS Yukarıdaki çözüm tek cevap değildir, X ve Y registerleriyle de aynı şeyi yapabilirdik. Cevabınız yüz güldürüyorsa gelecek sayıyı okuyun. Eğer çalışmıyorsa bu sayıyı tekrar çalışmanızı tavsiye ederim.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 26
C000 LDY #$03 C002 LDA ($43),Y C004 RTS Yukarıdaki örnekte 43 bölgesi 04'e, 44 bölgesi 02'ye ve 0204 bölgesi 20'ye eşittir. Bundan başka öğreneceğimiz yükleme (load) komutları yok. İşte zamanınızı hesaplamanız için küçük bir test: 64'ün saatinin HI byte'ını A0 bölgesi tutar. MID byte'ı (iki orta digit) A1 bölgesi ve LOW byte'ı A2 bölgesi tutar. Bütün saati bir defada nasıl okuyabilirsin? Bu sorunun bir sürü cevabı vardır, cevaplardan en
İyisi:
CO00O LDA $ A0 C0O02 LDX $ At CO04 LDY $ A2 Co06 RTS Sizin programınızda bunlardan biri değilse, önemli değil, uzun zamanda da olsa çalışır. Eğer programı-
“nız çalışmıyorsa bu bölümü tekrar çalışın.
REGİSTER'LERİ HAFIZADA SAKLAMA Şimdi register'lerin nasıl yüklendiklerini ve onların nasıl değer yüklendiklerini biliyoruz. 3 tane register olduğu için bunları depolamaya ihtiyacımız vardır. BASIC programını üç değişkenle yazabildiğinizi düşünebiliyor musunuz? Bu bölümde register'leri hafızada nasıl saklayacağınızı öğreneceksiniz. Hafızaya yükledikten sonra, onları oradan alıp tekrar registerlere yükleyebilirsiniz. ZERO PAGE ADRESLEME: İlk saklama (depolama) komutu STA ile çalışacağız. Bu A registerini depola demektir. Zero Page kullandığımız registerini 00-FF bölgelerinde depolayabiliriz. Aşağıdaki program A register'ini FB bölgesine depolar: C000 LDA #$80 C002 STA $FB C004 RTS Programı çalıştırdıktan sonra ana menüye dön. Şimdi 4 tuşuna bas. 'DATA DÖKÜMÜ BAŞLANGIÇ ADRESİ' yazısını görmelisin. 00FB yaz ve RETURN'e bas. Kompüter sayıları basmaya başlayacak. Bu rakamlar hafıza bölgesinin değerleridir. Dikkat et ilk sayı FB bölgesindeki 80'dir. X ve Y register'leri de aynı şekilde Zero Page'de depolanabilir. Bunlar için komutlar STX (X registerini depolama) ve STY (Y registerini depolama) İşte herbiri için birer örnek: C000 LDX #$23 C002 STX $FE C004 RTS
$ 00 C002 STY $ CB RTS Programı yazdıktan sonra ana menünün 4 üncü seçeneğiyle kontrol edebilirsiniz.
ZERO PAGE INDEXED ADDRESSING Bu load komutunda olduğu gibidir, bu sefer depoluyoruz. Bu komut A register'ini, X register'ini index olarak kullanır. Örnek olarak 'STA $25,X' şeklindedir. Bu A register'ini 25+X bölgesine yerleştirecektir. (X registeri) : İşte bunu gösterecek program: LDX #$45 C002 LDA #$FF C004 STA $25,X C006 RTS A registeri 6A bölgesine depolanır, çünkü 25+X = 25+45 = 6A'dır. Bu ana menüdeki 4. seçeneği kullanarak kontrol edebilirsin.
X registeri aynı şekilde kendini depolayabilir, yalnız bu sefer Y registerini index olarak kullanmalıdır. İşte herbiri için örnek: C000 LDX #$80 LDY #$05 C004 STX $F0,Y C006 RTS
C002 LDY /&$ 00 C002 LDX FO COO4 STY $ 11.X CO06 RTS
Birinci örnekte X registeri F5 bölgesine depolandı, çünkü F0+Y = F0+5 = F5'tir. İkinci örnekte Y registeri 101 bölgesine depolandı, çünkü 11+X = 11+F0 = 101'dir.
ABSOLUTE ADDRESSING Üç register de kendilerini depolamak için absolute adresleme kullanabilirler. Daha önce söylediğim gibi Cursor'ün rengi 0286 bölgesindedir. Bu program 0286 bölgesindeki değeri değiştirmekle kürsörün rengini değiştirecektir.
CO00 LDA /£$ 00 C002 STA $ 0286 Co05 RTS
Yukarıdaki programda olduğu gibi A register'ine değişik değerler vererek cursor'ün rengini değiştirebilirsin. 028A bölgesi tuş tekrarlama içindir. Eğer bu bölgenin değeri 80 e eşitse tuş tekrarlar, yoksa tekrarlamaz. Bu program tuş tekrarlama için X register'ini kullanır. C000 LDX #$80 C003 STX $028A C005 RTS Bu programı denemek için RUN/STOP tuşuyla programı durdur ve herhangi bir tuşa bas. D020 bölgesi ekranın bordür rengini kapsar. Takip eden program Y registerini kullanarak bordür rengini değiştirir. C000 LDY #$00 C002 STY $D020 C005 RTS Y register'inin değerini değiştirerek bordür rengini istediğiniz renge değiştirebilirsiniz. ABSOLUTE INDEXED ADDRESSING Absolute Indexed Adresleme ile depolama sadece A registeri ile yapılabilir. Bu defa A registeri X veya Y registerlerini index olarak kullanabilir. Bu programlar ekran üzerine karakter depolar. Bakalım görebilecekmisiniz: C000 LDX #$29 C002 LDA #$21 C004 STA $0400,X C007 RTS