Commodore sayı 64, sayfa 18

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 18

Programdan da anladığınız gibi, ilk olarak normal kayıt yapacakmış gibi SETLES ($FFBA) ve SETNAM ($FFBD) adreslerine sıçrayarak, kaydın kasede yapılacağını ve $CDDA adresinden başlayan $10 baytlık bir başlık bulunacağını bilgisayara bildiriyoruz. Dikkat ettiyseniz, bu turboda geçen sefer yaptığımız gibi programın yarısını başlığa eklemedik (uzunluğu $10'dan fazla vererek). Bunun sebebi, başlık kısmında bir korumamızın bulunmamasıdır. Yani FOUND yazısından sonra basılırsa, programın en önemli yarısı ortaya çıkacaktır. Bunun yerine, $0351'deki parçayı da $02A7'den başlayan parçayla birlikte kaydediyoruz. Fakat bunu yapmak için yüklenen IRQ interrupt vektörünün $EA31'i değil, $F92C'yi göstermesini sağlamamız gereklidir. Aksi takdirde, programımızın $0316'dan sonrası yüklenmeyecektir. Buradan sonra, normal bir SAVE işlemi için gereken işlemlerden sapmalar başlıyor. İlk olarak, $C1-$C2 adresine, kaydedilen program yüklenirken, hangi adresten başlayacağını alçak-yüksek bayt (low-high: $02A7 yazmak için, $C1'e $A7, $C2'ye $02 değerleri verilir) formatında yazıyoruz. Yüklenecek programın bitiş adresini de yine aynı formatı kullanarak $AE-$AF adreslerine yazıyoruz. Bundan sonra, $EF038 adresine sıçrayarak, RECORD ve PLAY'e basılmasını bekliyoruz. Başlık kısmını kaydetmeden önce yüklenecek olan data tipinin makine dili programı olduğunu, akümülatör'e (A registeri) $03 değerini yükleyerek belirtiyoruz. Artık $F76A adresine sıçrayabiliriz. Böylece başlık kısmını kasede kaydetmiş olduk. Şimdi de kaydedilecek data kısmının belleğin neresinde olduğunu bilgisayara bildirmemiz gerekiyor. Bunun için de datanın şu anda bellekte başladığı yer olan $CD48'i $C1-$C2 adreslerine demin yaptığımız gibi yerleştiriyoruz. adreslerine de son baytın adresini verdikten sonra, $F67C adresine sıçrayarak data kısmını da kasede kaydediyoruz. Artık turbosuz kısmın (yükleyici; loader) kaydı tamamen yapıldı. Turbolu kısmın nasıl kaydedildiğini geçen sayıda detaylı olarak anlatmıştım. Fakat güvenliğiniz açısından, turbonun başında aranan $40 serisinin ve ondan sonra gelen $5A baytının değerlerini değiştirmeyi unutmayın (yükleyicide de aynı değerleri değiştirin!!). DİKKAT: $40'ın yerine içinde yalnızca tek bir bit bulunduran bir bayt yazın ($01, $80, $20 gibi). Bu sayede, eskiden yaptığınız korumasız turboların yükleyicileriyle (loader'larıyla) korunmuş programınızın yüklenmesini engellersiniz.

., CCE6 LDY #$40 €CE8 LDA #S04 ;Bu Baytı değiştirin CCEAJSR $CCF6 €CEDDEY CCEE BNE LDA #$91 ;Bu Baytı Değiştirin » CCF2 JSR CCESIRTS

x CMP #$04 ;CCE9'dakiyle aynı ., CE03 BNE $CEOE

CMP #$04 ;CCE9'dakiyle aynı CEİ7 BEÇ CE19 CMP #$91 ,CCF1'dekiyle ., CEİB BEÇ $CE24

Peki hangi adreslerin değerini değiştirerek, bilgisayarınızın ısrarla programınızı çalıştırmasını sağlarsınız? Bunu yapmak için genelde $0300'dan başlayıp, $0334'e kadar süren, içinde çok hayati rutinlerin adreslerini bulunduran yerlerden yararlanırsınız. Bu adresler ve yaptıkları işler şöyledir: $0302-$0303: BASIC warm start. READY yazıldıktan sonra kullanıcıdan komut alan ve imleci ekrana çıkaran rutinin başlangıç adresi. Genelde sadece bu adres kullanılır.

$0306-$0307: BASIC LIST. LIST komutunun rutininin başlangıç adresi burada bulunur. Kullanmak pek de gerekli değildir. $0316-$0317: BRK interrupt vektörü. Bir BRK komutuyla karşılaşılırsa sıçranacak adres burada saklanır.

$0318-$0319: NMI interrupt vektörü. NMI interrupt'ı oluşturulduğunda (mesela RESTORE tuşuna basıldığında) sıçranacak adres burada saklanır.

Buradan sonra gelecek olan KERNAL vektörlerinin hepsinin bizim rutini göstermesi şart değildir. Fakat kırıcının gözünden kaçan bir vektör bile kullanıldığı zaman yükleyicinize sıçrayacağı için, kırıcıya zor anlar yaşatacaktır. $031A-$031B: KERNAL OPEN vektörü. $031C-$031D: KERNAL CLOSE vektörü. $0320-$0321: KERNAL CHKOUT vektörü. $0322-$0323: KERNAL CLRCHN vektörü. $0326-$0327: KERNAL CHROUT vektörü. Bu adresi her zaman kullanmanızı öneririm. Çünkü bilgisayarınız ekrana herhangi bir şey yazmak istediğinde bu vektörün gösterdiği yere sıçrayacaktır. $0328-$0329: KERNAL STOP vektörü. Bu vektörü kesinlikle kullanmayın. LOAD işlemi sırasında durmadan bu vektörün gösterdiği adrese sıçranır. Eğer değiştirirseniz, yükleme tamamlanmaz. $032C-$032D: KERNAL CLALL vektörü. $0330-$0331: KERNAL LOAD vektörü. $0330-$0332: KERNAL SAVE vektörü,

KERNAL LOAD

Klavyeyle gezinmek için ← ve → tuşları.