Commodore 64 ve kopyalama yöntemleri

Commodore 64 hemen hemen genel bir ön kabulle kötü bir BASIC derleyicisine sahip olmasına rağmen özellikle makine dilinin iyi kullanılabilmesi, kolayca değişiklik yapılabilmesi ve popülerliği nedeniyle dünyanın en çok programa sahip, dolayısıyla program kopyacılığına en elverişli makinedir. Commodore 64'ün program listesi kabardıkça yeni kilit sistemleri ve buna bağlı olarak da yeni kopyalama yöntemleri amansız bir yarış halinde geliştirilmekte. Böylesi bir gelişimin sonunda korumalı bir programla uğraşırken karşılaşacağımız sorunlar da giderek artmakta. Bugün "tek program kopyalanabilir mi?" sorusu içinde, nereden başlamalı, nasıl bir program, nasıl bir kilitle korunmuş, listesini almanın bir yolu var mı, hafızanın neresine yerleşiyor vb... sorularını da barındırıyor. Bütün bunların yanı sıra programların kayıt biçimleri (kartuş, disket ya da kaset) de kopyalama açısından ayrıca önem taşıyor. Ama hemen moraliniz bozulmasın. Bütün bu sorunlar, eldeki her üç kayıt sistemi için süper kopya programları varsa hemen çözülecektir. Kopya programları günümüzde hemen her ülkede pek ucuz olmayan fiyatlarla ama serbestçe satılmaktadır. Ülkemizde de kopya programlarını temin etmek mümkündür. Ancak elimizde kopya programı yoksa her kayıt sistemi için ayrı ayrı çözümler düşünmek zorundayız. Ülkemizde şu anda kasetlerin yaygın olarak kullanılmakta olduğunu göz önüne alarak, kartuş ve disket bahsini kısa geçip özellikle kaset kayıt sistemi üzerinde durmak istiyoruz.

Kartuş kayıt sistemi

Kartuşlar çalışma sistemi açısından hemen hemen bütünüyle benzerdir. Kartuşun içinde bulunan 4, 8 ya da 16 K'lık RAM'e program kaydedilmiştir. PROM yazıcı cihazlarla entegre devreler üzerine yazılan programlar eğer auto-run'lı iseler, yani RUN komutunu programın bir parçası olarak içeriyor ve dolayısıyla yüklenir yüklenmez çalışmaya başlıyorlarsa kopyalanmaları oldukça zordur. Bunun nedeni, bilgisayarın işletim sisteminin, bilgisayar açılır açılmaz USER PORT'u (kartuşun takıldığı port) kontrol etmesi ve eğer kartuş varsa bilgisayarın kontrolünü tamamen kartuşa bırakmasıdır. Ama yine de kartuşları kopyalamanın birçok yolları vardır. Bunlardan biri PROM yazıcı/kopyalayıcı aletler kullanılarak, kartuş içindeki RAM çoğaltmasıdır. Bu kopyalama biçimi oldukça kolay olduğu halde, aletlerin pahalı olması sorun yaratmaktadır.

Disket kayıtları

Koruma altına alınmamış disketlerin kopyalanması kadar kolay bir şey olmaz, hele elimizde iki tane disket sürücüsü varsa. Hatta bazı bilgisayarlara bu işlemi kolaylaştırmak için COPY komutu bile konmuştur. Böyle kolaylıklar karşısında yazılım firmaları, programlarını korumak amacıyla türlü türlü kilit yöntemleri geliştirmeye çalışmaktadırlar. Programları auto-run'lı hale getirmek, ya da programın bir parçası olan error'lar, yani hatalı komutları programa okutarak disketleri errorsüz çalışmaz hale getirmek, ancak joystick portuna sokulan bir parçanın (dongle) yardımıyla çalışan programlar hazırlamak (bu çok özel bir hardware çalışması olduğu için kopyalama açısından büyük sorunlar doğurmaktadır). 1541 "zeki" disket sürücüsünün 40 kanal açmasına rağmen 35 çalışmasından yararlanıp, illegal kanal olarak adlandırılan 36-40'ıncı kanallarına programı taşırmak, disket sürücünün kafasının senkronizasyonunu bozarak kanal aralarına program yazmak (halftrack) ve bu programı yine halftrack okutmak disket kilitlenmesinde kullanılan değişik yöntemlerin bir bölümü. Disket sürücünün işletim sistemi (DOS) bu kilitleme yöntemlerinde çokça kullanılıyor. (Bu konuda daha ayrıntılı bilgi edinmek isteyenlerin TELETEKNİK tarafından getirilen The Anatomy of 1541 kitabına bakmalarını öneririz.) Disketlerin oldukça iyi korunduğunu görüyoruz. Bu durumda kopyalama ancak bu koruma yöntemlerini ve karşı yöntemleri çok iyi bilerek başarılabilir. Ya da bir süper kopyalama yöntemi bulmak en iyi yoldur.

Kaset kayıt sistemi

Ucuzluğundan ötürü ülkemizde en çok kullanılan kayıt yöntemi kaset kayıt yöntemidir. Commodore 64'ün her şeyden önce bir ev bilgisayarı olduğu düşünülürse kaset kayıt yönteminin bilgisayar sahiplerini birçok açıdan tatmin ettiği söylenebilir. Teyp sahibi program arşivcilerinin kopyalama sorunları diğer iki sisteme göre daha azdır. Çünkü kaset sistemi Commodore kayıt sistemleri içinde kopyalama işlemine en uygun olanıdır.

Ne bir minik işlemciye (micro-processor) ne de bir kontrol aracına sahip olduğu halde yine de kaset kayıt yöntemleri için güçlü koruma programları geliştirilmiştir. Ancak bu koruma yöntemleri genellikle teyp buffer'ı kullanılarak oluşturulmaktadır. Bu koruma yöntemlerinin en çok kullanılanı programları auto-run'lı (kendi kendine başlayan) hale getirmektir. Bu işlem nasıl gerçekleşir? Buna cevap vermek, bu tip programları kopyalamada ilk adım olarak önem taşımaktadır. Şimdi hepinizin biraz olsun makine dili bildiğini varsayarak bu sistemin işleyiş mantığını açıklamaya çalışalım.

$02A7-$02FF'deki kullanılmayan hafıza BASIC vektör lokasyonlarına dayanır. Bu 5 vektör noktasının her biri rutinin başlangıç adresini içeriyorsa, RUN-STOP/RESTORE girişimleri rutinde otomatik bir sıçramaya yol açacaktır. Bu nedenle bir programı, listing ya da disassembly için durdurmak, tuşlar ya da keyboard'la mümkün olamayacaktır. Bu vektör lokasyonları teyp ya da diskten yüklenmişse program yüklenir yüklenmez onların gösterdiği program run etmeye başlayacaktır. Bu auto-run'ın bir türlü anlaşılmayan noktasıdır. Auto-run kullanımının bunu sağlayacak programın, vektör lokasyonları yüklenmeden önce kompüterde zorunlu olarak bulunmasıdır. Auto-run'ın temel amacı, kullanıcının programı çalıştırmadan önce dökümünü (listingini) almasını engellemek olduğuna göre, lokasyon vektörleri ile birlikte ama onlardan önce yüklenmesi gerekir. Vektörlerden önce, bir program yüklenebilecek kadar geniş olan tek bölge, $02A7 ve $01FF arasında kalan bölgedir. Bu bölge çok geniş olmamakla birlikte böyle bir işlem için idealdir.

Bu bağlamda düşünürsek lokasyonların yerlerini (yani BASIC pointerları) değiştirmek, böyle korunmuş programların auto-run etmesini engelleyebilecektir. Bunun için, yazının sonunda bir program listesi ve kullanılışının açıklanması konulmuştur. Ancak daha önce, birkaç ufak uygulamadan örnek vermek istiyoruz. Auto-run'lı bir programı yüklemeden önce, basit bir POKE içeren bir BASIC satırı ile BASIC pointerları değiştirmek mümkün olabilir. Örneğin, programı yüklemeden önce, POKE 44, 158 verip, programı daha sonra yüklersek, büyük bir ihtimalle "syntax error" mesajı ile karşılaşırız. Bu mesajı aldıktan sonra POKE 44, 8 BASIC pointerları tekrar eski yerine döndürecektir. Ama program auto-run etmeyecektir. Bundan sonra SAVE komutuyla auto-run etmemiş programı kaydedebiliriz. Bu komutlar makine diliyle yazılmış ve yalnızca auto-run'la korunmuş hemen hemen bütün programlar için geçerlidir. Eğer program BASIC dilinde yazılmışsa, BASIC belleğinin başlangıç adresi olan 2048 adresine 0'dan 29'a farklı herhangi bir değeri POKE ederek bu programın auto-run'ını da durdurabiliriz. Bu işlemi TRELO-TMACHRELO programı ile daha kolay olarak gerçekleştirmek mümkün. Bir programın auto-run etmesini engellemenin bir başka yolu da (bu genellikle makine dili programlar için geçerli, ancak makine dili olmayan program da kalmadı) Monitor programı bilgisayara yüklendikten sonra "programın ismi", 08 komutuyla program yüklenir ve bu şekilde yüklenen program genellikle auto-run etmez. Daha sonra aynı biçimde bu program save komutuyla korunabilir. Yalnız bunun sakıncası programın başlangıç ve bitiş adreslerinin bilinmesi gerekliliğidir.

Trelo Tmachrelo

nedir ve nasıl kullanılır

Bir sonraki bölümde anlatılacak sürecin esas amacı, programları yanlış yerlere yüklemeye zorlayarak auto-run ve diğer engelleyici mekanizmaların çalışmasını önlemektir. Bu, programa girip ne yaptığını anlamanızı sağlar. Bazı durumlarda sadece programı SAVE etmek yeterli görülebilir. Auto-run'ın engellenmiş olması bunun için yeterlidir. TRELO TMACHRELO programında gösterilen tekniğin temeli programlara girişi önleyen auto-run rutinlerinin normal olarak bellek lokasyonlarının $0801'den önceki kontrol bölgesine yüklenmesi yerine hafızada $2000'e kaydırılmasıdır. Böylece normalde $0400'e yüklenen bir auto-run, bu program tarafından $2000'e yüklenecektir. Bu da programın otomatik olarak run etmesini engelleyecektir. Bu işlem TRELO tarafından yapılır. TRELO gereken hesapları yapar ve teyp header'ında (başlığında) yapmanız gereken değişikliklerin orijinal adreslerini de verir. Ancak, kırılmaya çalışılan program anormal bir pozisyonda yüklendiği için çalışmayacaktır. Bu sonuç, header'ın, programınızın nereye yükleneceğini söyleyen data'yı kontrol etmesinden kaynaklanmaktadır. Yeni kopyanızın çalışabilmesi için yeni bir header'a sahip olması gerekir. Bu sürece header swapping denir. Şekilde verilen veri saklama ("save data") audio devresi saniyesi saniyesine bir zamanlama ge-

POKES:
PRİNT
PRİNT"
İFAS< >" THENS
10 ";NF:
11 IFCİ
280,11:POKES
Bi,li

LOAD DATA AUDİO & SAVE DATA AUDİO

Bilgisayar |

—— >——

LOAD

Kayıt Cihazına | aaa Ga Bilgisayar 1 SAVE 1 is i Kayıt Cihazına Kaset kapısı (port) PIN FUNCTION | Toprak 8-2 | + 5 Volt C-3 | kaset motoru D-4 | kaset okuma A 8 GC DEF E-5 | kaset yazım F-6 | kaset anahtarı HEADER SWAPPING'de ÖRTÜŞME ZAMANI Yaklaşık 13 sn. Header ton bağlayıcı Header Ton Data

HEADER SWAPPING SÜRECİ

FROM
PRİNT"

rektirir. Zamanlama yöntemini kullanacaksanız, 4 +/- 0.2 saniyede tepki göstermeniz gerekir. Ayrıca bantta headerin tam başladığı yere dikkat edilmelidir. Süreç, yeniden yerleştirilmiş kopyanın headerinin değiştirilmesine dayanır.

Relocate/

Loader Prosedürü

1. Load ve Run TRELO 2. Relocated kopya yapmak için harekete geçme sinyalini izle. Yeni header yapmadan önce şu aşamaları gerçekleştirmek gerekir. 2.1 “Save data audio” devresini bağlayın ya da uygun bir kronometre edi-

3LOAD"TMACHRELO",B,1
(C)84 VENE'
TO "şEA:5YSBO43

nin. Burada audio devresinin kullanılması daha güvenilir bir yöntemdir. Bazı ekranlarda sesi açtığınız takdirde, SAVE audiosunu, yani programa başladığı âna özgü sesi, işitebilirsiniz. Bu da sizi devre ya da kronometre kullanmaktan kurtarır. Bunu, bir programı, monitörünüzün sesini sonuna kadar açıp, SAVE ederek sınayabilirsiniz. Relocate edilmiş kopya bandını ilk ton yükselişinin başına yerleştirin. Bu pozisyon anlama açısından önemlidir. Hareket sinyalini izleyerek yalnızca save edip teybi durdurun. İpucu: Teypten save ve load seslerini dinlemeyi öğrenirseniz aradaki kısa süreyi kolayca yakalarsınız. Relocated kopyada ve headerda aynı ad kullanırsanız header için gereken zaman değişmez. Son olarak teybi aynı yerden başlatmayı unutmayın.

RINT" 319)":
TAPE IN DRİVE — SET FOR gi F7"
2 İNPUT" NEW TAPE HEADER"; AK$
3 IFAK$#-"Y"THENİ00O
4 END
5 ORİGİNAL TAPE İN DRİVE": ,PEEK(1)AND223
TAPE LOAD... WHEN FOUND MESSAGI
THEN ENTER
1,11
(831)
(832) *256) *PEEK (831) :
SIDAC (C)B4 VENZ"
TAPE EPRE!
,PEEK (1) OR3 PLAY
5 İNPUT" INPUT FİLENAME" ş : POKE2Sİ ,NL
8YS8008: 5YSB103
OF p
INPUT" SBAVE ON T/D"şCK$:
DİSK TO COPY
O AH: POKEB29 , Al
75,BH:POKE174,BL
* ROUTİNİ
,PEEK (1) AND:
WHEN Ri
30 GETA$: 130
O PLAY AND RECORDE ,PEEK (1) ORZ2
FOR HİT
WHEN READY"
8 F7 WHEN DONE"
3 — "şODEPRİNT"ŞORİGİNAL ENDİNG ADDRESS —
T"THENB
WHEN READY" : , Br POKEBO49 GOTO9
BH: , BL : POKE254 , AH: POKE2SE, AL
TO REPLACE TAPE HEADER *"
RIİNT" 9 TAPE TO EXACT BEGİNNİNGE"
O 5YS8043
O DİSK-EDİTÖR TÜ LOAD TÜM ADDRI

READY.

TMACURCUN

İF 5
LDR A5
85
Lim
FF İSE e
LDA 4FE
1F56 . LDX #441 (20 1
. #203 Eğ
.206 BD FF 4FFBD - 65
GÖ LDR
1FSF FD LDX $FD
1FEL AS FE — LDY (29
1F63.&0 D5 FF
1F66 AB İF JSR “50
RTS
1FSA ERK
> SR $1F95
1FEE . LDA #401
4301 Bö
> #SFF A5
-
1F7? LDA $FB 2D
1F79 . LUX #$Bİ
1FTB 2  LDY #302 D9
-28 EN FF JSR 4FFBD