Bu sayfadaki yazılar
Sayfanın metni
Sayfa 62
VIA) ve karakter ROM'u kapsıyor. Her iki ROM alanı, yani BASIC ve C 64 modunun işletim sistemi, 128'de 16 KByte'lık bir ROM elemanına yerleştirilmiş durumda. C 64'te ise durum bunun tam tersi. BASIC ve işletim sistemi, ayrı ayrı 8 KByte'lık ROM'larda bulunuyor. 128 modunda dağılım daha da karmaşık. Çünkü çok daha kapsamlı bir BASIC'in (7.0 versiyonu) ve ek bir 80 karakter üreticisinin varlığı söz konusu. BASIC ROM'u her biri 16 KByte'lık iki kısma ayrılıyor: Bellek haritasında BASIC 4. kısım ve 2. kısım (şema 1 ve 2). Birinci kısım $4000 ila $7FFF adresleri arasında, ikinci kısım ise $8000 ila $BFFF arasında yer alıyor. BASIC ROM, toplam olarak 32 KByte. Bir karşılaştırma yapılacak olursa, C 64'ün 2.0 BASIC versiyonu yalnızca 8 KByte uzunluğunda. 128'in işletim sistemi (Kernal), aynen C 64'te olduğu gibi, $E000 ve $FFFF adresleri arasında bulunuyor. İşletim sistemi bir monitör programı içeriyor. 40/80 karakter üreticisinin rutinleri, $C000'dan $CFFF'e kadar olan alanda bulunuyor.
BASIC programları için 128'de C 64'e göre 81.5 KByte daha fazla yer var. Bunu sağlayan, 64 KByte'lık iki RAM-Bank'ı arasında gerçekleştirilen Bank-Switching.
Bank-Switching
Nedir?
Tüm 65xx'lerde ve 8502'de olduğu gibi, 16 adres hattına sahip bir işlemciyle, 2 üzeri 16=65536 bellek hücresinden daha fazla belleği (64 KByte) doğrudan adreslemek mümkün değildir. Eğer 64 KByte'dan daha çok belleğe sahip olmak istenirse, tek bir olasılık vardır. O da, Bank-Switching adı verilen farklı bellek yönetim sistemini kullanmaktır. Bank-Switching, çalışılan bellek alanını değiştirme gibi bir anlam taşır. Commodore 128'in 128 KByte'lık belleği, bu amaçla her biri 64 KByte'lık iki kısma ayrılır. Bellek yönetim birimi (Memory Management Unit-MMU) olarak adlandırılan birim, işlemcinin 64 KByte'lık bellek bankalarını dönüşlü olarak “görmesini” sağlar. Adından da anlaşıldığı gibi, bu devre bellek adreslenmesini yönetir. MMU, işlemcinin hangi RAM-Bank'a bakması gerektiğini, yani okuma/yazma erişimlerinin belleğin neresinde gerçekleşmesi gerektiğini belirler. Aslında görevi bununla sınırlı değildir. MMU, ROM konfigürasyonunu da belirler, yani işlemciye komutları hangi ROM'dan -Kernal'dan veya bir ek kartın EPROM'undan- alacağını bildirir. MMU, üzerinde hiçbir değişiklik yapılamayacak ölü bir eleman değildir. Aksine, bu elemanla gerçekleştirilebilecek bir sürü fikir akla gelmektedir. Örneğin, birden fazla Bank'a, farklı Bank'larda bulunan birden çok program bölünen, Interrupt tarafından yönetilen bir kilit, MMU ile gerçekleştirilebilir. Commodore 128'de BASIC belleği ikiye bölünmüş olarak yönetilir. 0 RAM-Bank'ı (64 KByte) BASIC programlarına, 1 RAM-Bank'ı BASIC değişkenlerine ayrılmıştır. BASIC programcısı açısından bunun anlamı, program ve değişkenler için her biri yaklaşık 60'ar KByte'lık belleğin bulunmasıdır.
bir RGB ve bir kompozit monitörle. Solda program, sağda ise bununla üretilen grafik.
(DEVAM EDECEK)
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 63
55 000
OPEN ENİ“ B$t
VA
Bİ Aİ
Başlangıç Adresini
Bulmak:
Aşağıdaki yordam herhangi bir programın başlangıç adresini bulmada kullanılır. Bu genellikle makine dilindeki bir programın SYS kodunu bulmak için çok kullanışlıdır.
55000 INPUT 55001 8,A3,B3:CLOSE8 - 55002 A-ASC(AŞ 4 B- ASC(B34
55003 PRINT “BAŞLANGIÇ ADRESİ: ”; A*2564B
PRINT PEEK(43)+256*PEEK(44) ile BASIC programınızın hangi adresten başladığını öğrenebilirsiniz.
PRINT 4 size değişkenlerin saklanmaya başlandığı ilk adresi verecektir.
PRINT CHR$(PEEK(69)AND 127); CHR$(PEEK(70)AND 127) verdiğinizde, bilgisayarın en son kullandığı değişkenin adını öğrenirsiniz.
PRINT PEEK(55)+256*PEEK(56) ile, BASIC programı ve değişkenler için ayrılan boş içbellek kısmından sonra gelen ilk byte'ın adresini öğrenirsiniz.
Metinlere yazı düzeni vermek: Çoğu zaman metinleri ortalamak veya sağa dayalı yazmak konusunda sorunlarla karşılaşırız. Aşağıdaki kısa BASIC satırları bu sorunu halletmekte size yardımcı olacak: Ortalama: FOR I=1 TO (40-LEN(A$))/2:PRINT " ";:NEXT:PRINT A$ Sağa dayalı yazma: FOR I=1 TO 40-LEN(A$):PRINT " ";:NEXT:PRINT A$
A$ değişkeni, her defasında yazı düzeni verilecek satırı içermelidir.
Başlangıç adresini bulmanın diğer bir yolu ise şu:
10 A$- “program adı” 20 OPEN 1,8,0,A$4 “,P,R” 30 GET 1,B$:CLOSE | 40 PRINT ASC(AŞ 4 CHR$(0)) 4 4 Eğer bitiş adresini merak ederseniz, LOAD “prog- ram adı”, 8,1 ile yükleyin ve PRINT PEEK(176) * 256*PEEK(177) ile programın son byte'ından sonra gelen adresi öğrenin.
Eğer bir READ komutunun hemen arkasına PRINT PEEK(63)+256*PEEK(64) yazarsanız, en son okunan verinin okunduğu DATA satırının numarasını görürsünüz.
Eğer herhangi bir BASIC programı satırında PRINT PEEK(57)+256*PEEK(58) olursa, o satırın numarasını ekranda görürsünüz.
POKE 775,200 yaptıktan sonra programınızı LIST edemezsiniz. POKE 775,167 ile tekrar normale dönülür.