Bu sayfadaki yazılar
Sayfanın metni
Sayfa 162
!to "hello.prg"
* = $080d lda #<yazi ldy #>yazi jsr $ab1e rts yazi !text "MERHABA DUNYA" !byte 0
Bu programı derledikten sonra emülatör ekranında "SYS 2061" yazarak programı çalıştırabilirsiniz. Elbette ki programları otomatik çalışabilir hale getirmek işimizi çok daha kolaylaştıracaktır. Bunun için programın başına iki satır eklememiz yeterlidir.
!to "hello.prg"
* = $0801 !byte $0c, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00
* = $080d lda #<yazi ldy #>yazi jsr $ab1e rts yazi !text "MERHABA DUNYA" !byte 0
Bu eklenen satırlar Commodore 64'ün Basic'inde "0 SYS 2061" komut satırına tekabül eden byte'ları içerir. $0801 adresi ise Commodore'un varsayılan Basic başlangıç adresidir. Dolayısıyla bu program otomatik olarak "MERHABA DUNYA" çıktısı verecektir.
EditPlus kullanmayanlar DOS ekranından ACME'ye "hello.a" dosyasını parametre olarak vererek de "hello.prg" dosyasını elde edebilirler. Örnek:
C:\Acme>acme c:\myapps\hello.a
Bu komut satırını çalıştırdığınızda, bulunduğunuz klasörde "hello.prg" dosyası oluşacaktır.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 163
Daha sonra Vice ya da CCS64 gibi bir emülatör ile bu dosyayı çalıştırabilirsiniz. Vice'da prg dosyalarını kolayca çalıştırmak için sürükle&bırak yöntemini tavsiye ederim.
Şimdi gelelim programın açıklamasına. $ab1e adresi Commodore 64 Basic ROM'unda yer alan STROUT yani "Output String" ROM adresine denk gelir (bkz: Link (http://www.tkk.fi/Misc/cbm/docs/c64-rom.html)). Bu adres, ekrana basacağı yazının adresinin alt ve üst byte'larını sırasıyla A ve Y register'larından okur. Commodore 64'de bellek adresleri 16 bit, ancak register'lar 8 bittir. Bu yüzden bir bellek adresine işaret etmek için her zaman (zero page yani $0000-$00FF adres aralığı hariç) iki byte ya da iki register kullanılır. $ab1e adresi "yazi" etiketinden itibaren 0 (sıfır) byte'ını gördüğü yere kadar olan tüm karakterleri ekrana basar.
Elbette ki ekrana yazı yazdırmanın tek yolu bu değildir. Commodore'un varsayılan ekran adresleri $0400-$07e7 aralığındadır. Dolayısıyla ekranın başından itibaren sabit bir karakter sayısındaki text'i transfer rutiniyle de ekrana bastırabiliriz. Ancak bu durumda "!text" yerine "!scr" kullanmamız gerekecektir.
hello2.a
!to "hello2.prg"
* = $0801 !byte $0c, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00
* = $080d ldx #$00 loop lda yazi,x sta $0400,x inx cpx #$0d bne loop rts yazi !scr "merhaba dunya"
Bu örnek ekranın en sol üst köşesinden itibaren "merhaba dunya" yazacaktır. Buradaki "cpx #$0d" satırında yer alan $0d, desimal sayı sisteminde 13'e karşılık gelir ki bu da "merhaba dunya" yazısının toplam karakter sayısına eşittir. Farklı uzunluklardaki yazıları ekrana bastırırken $0d değerini yazının uzunluğuna göre değiştirmek gerekecektir.