COMMODORE 64'ÜN BELLEK HARİTASI-5

Dizimizde bu ay, bazı ilginç bellek adreslerine göz atacağız. Bu adreslerin özelliklerini aşağıdaki programlar sayesinde uygulamalı olarak inceleyebilirsiniz.

LXSP 00C9-00CA 201-202 INPUT komutuyla çıkan soru işaretinin X-Y şeklindeki konumu. Başka bir deyişle, INPUT ifadesi, girişleri bu iki adresin sakladığı koordinatlarda kabul eder. Bu adresleri POKE ederek, soru işaretinin yerini değiştiremezsiniz. SFDX 00CB 203

Flag: Shift ile ayrılan karakterleri yazma. Karakterler yazılırken, adres 197'de gösterilen değeri alır ve bu da çoğunlukla 64'tür. Bundan sonraki birkaç adres kursorla ilgili. BLSNW 00CC 204 Flag: Kursor yanıp sönme duru-

PROCRAM PRG-?
POKE 707,6
POKFE
02030 PRİNT
STE

mu. 0 — kursor yanık, 1 — kursor sö-

nük (Program 1)

Eğer GET komutunda kursorun yanık olmasını istiyorsanız, GET komutunun bulunduğu satıra bir POKE komutu eklemeniz gerekiyor. Kursorun yanık olduğu bir sırada RETURN'e basacak olursanız, kursor ekranda bir kare olarak kalacak ancak bu, yaptığınız girişin değerini değiştirmeyecektir.

00CD 205 Zamanlayıcı: Kursorun yanık veya sönük kaldığı süre. Normal değeri 2.

PROGRAM ADI
96018
09020
008336
89040
90068
POKE 204,0:POKE
IF 16
FRINT AL;
GÖTÜ iü
PRIHT B$
IF THEN Fü

GDBLN 00CE 206 Kursorun altındaki değerin / olarak karşılığı. Normal değer

BLMON 00CE 207 Flag: Kursorun son durumu, yanık veya sönük. Normal değer: 0, CRSH 00D0 208

Flag: Klavyeden INPUT veya GET girişi. Normal değer: 0.

PNT 00D1-00D2 209-210 Pointer: O anki ekran satırı (ekranda 25 satır mevcut) adresi. Bu adresi POKE ile değiştirerek, ekrandaki yazıların yerini yeniden belirleyebilirsiniz. Bu kursor kontrollerine benziyor fakat, o derece kolay değil tabii. Örneğin:

(Program 2) Bu program, 30. satırdaki yazıyı ekranın sol üst köşesine yazacaktır. İşte size ekran adresini gösteren bir

PROGRAM ADI
ET
PRİNT CERAN TENEZLEN
€
00150
REM -KURSOR 4080150
>>> völeü
BULYO 69170
vUZMU
REM İCİNDE EKRAN MOR 06176
BULMA- vezvü
00250 FOR KEN |
90240 4 | ve2ra
REM
(209)
00270 :
REM
NERE
RECM CONTROL KUTUSUÜNUN ADRESİNE YA |
00320 PRİNT
003538 PRİNT ADRECİ |
|
00350 NEXT 1 | |
00380 GOTO 3
! 00746
l - |

başka örnek program: (Program 3)

PNTR 00D3 Kursor'un o anki satırda bulunduğu yer. Bu adres, yazılan bir satırda, BASIC'teki TAB (X) komutunu kullanır gibi yapılan boşlukların sayısını gösterir.

XTSH

00D4 212 Flag: Editör tırnak işareti modunda. (Bilindiği gibi tırnak işareti içinde CRSR, CLR/HOME vb. tuşların fonksiyonları gösterilebilmekte.) O tırnak işareti modunda olma belirtir.

LNMX

00D5 213

Ekran satırının kolon olarak uzunluğu. Normal değeri 39'dur. Eğer 39'dan küçük bir değer ederseniz yazdıklarınız o değerde dar yazılır. Bu program başta C$ değerinde saklanan yazı karakterini, arka arkaya yazarak 40 karakterlik bir yazı oluşturuyor (Program 4).

HV ADL
PRİNT
REM KELİMELERİ BİRBİKLERİNE BAĞLAM
a <ozD
Cts KİTAPLAR
a
cı
PEN KELİMELERE BUDAMA
FOR 1532 TO & STEP <1
PEN SATIR KARAKTER UZUNLUĞÜNÜ K
POKF 213,1
:
REN YAZI KARAPTERİ İNCE
LEME
For TO
1
PRİNT
REN BOS DÜNGÜYLE BİRAZ BEKLEME
FOR TO
NEXT ©
PELET
1
TELX
adığınızı 214

Kursorun o an bulunduğu satırın numarası. Normal değeri 0 ile 24 arasındadır. Bu adresi 0'dan 255'e kadar olan değerlerle POKE ederek, kursorun dikey pozisyonunu değiştirebilirsiniz. Aşağıdaki program iki ayrı kelimeyi birbirleri üzerinde yukarı ve aşağı kaydırmanızı sağlıyor (Program 5).

. Bu ade POKE gere ka işkenin- 00D7 dört ke- Geçiçi Bilek Sl arakter- seçici bilgi alanı,

PROGRAM ADI PTCER,
00180 PRİNT cıze>
00170 SÜTÜN DEĞERLERİNİ AYARLA 09128
He
(2422 00130
990190 4
98200 REM DEĞERLERİ ARTTIRMAZAZALTMA
FOR TÜ Y2 90156
00220 00156
00250
00250 REM YENİ SUTUN DEĞERİ VERME VE ESK 680170
FORE <226> 00209
FOR TO ALI
R Cuba) 00220
00276 PRİNT
006300 gö24ü
REM DEĞERİ RESETLEME VE YEMİ KARAK
TFERLERE Cu25>
00120 POKE 144)
00343 FOR TÜ 5 8270
R
00256 PRİNT > YUKARI
003€0 00250
900376 REN
09380 1F VİS22 THCN Ez
00200 4 00310
90400 REN SONRAKİ SÜTLÜ DEĞERLERİ
00410 NEXT | 06320
00420 4 00320
00436 REM 08348
90440 GOTO ZtÜ 00350
00250
PRİNT CuRa
DEK OO
PROORANIN --
PRİNT VE
PRİNT
PRİNT UZUNLUĞU
PRİNT
DEĞİSEENLERİN SONU VE
PRİNT DİZİLERİN BASLAIĞICI *
PRİNT
ERAT
PRİNT
PRİNT DİZİLERİN SONU VE
PRİNT BOZ
tap)
TE THEN 280
GİR DİZİ MEVCUT DE
GL)
PRİNT
PRİNT YAZI DİZİLERİNİN
BELLEK SONU &
PRİNT BELLEK ÜST SİNİRİ “
>
PRİNT
FRINT
BİTİRMEK ICİN <221>
BASIN *
Seb *

00D8 216 Flag: İlave (INSERT) modu veya PRINT komutuyla ekrana yazılan belli bir satırın soluna yapılan ilavelerin sayısı. 0 ile POKE yapmak ilave modunu kapatır.

LDTBI 00D9-00F2 217-242 Ekran satırları bağlantı tablosu ve aynı zamanda direk modda geçici editör buffer'ı. Bilgisayarların çoğunda satırlar iki şekilde algılanır. Daima RETURN'e basarak girdiğiniz satırlar mantıksal satırlardır. Ekranda gördüğünüz her satır ise bir fiziksel satırdır. Herhangi bir satırın tek bir fiziksel satırdan daha uzun olduğu durumlarda, bu fiziksel satırlar birbirine bağlanır ve bağlantı tablosunda saklanırlar. Bilgisayar, bunları tek bir uzun satır olarak düşünür. Bu adresler bahsettiğimiz bağlantıların saklandıkları yerlerdir. Bu bağlantılar 648. adresteki örnek programda da kullanılıyor.

USER 00F3-00F4 243-244 Pointer: Bu adres, ekran renklerinin yeraldığı bellek alanını (çoğunlukla 55296 adresinden itibaren) gösterir. KEYTAB 00F5-00F6 245-246 Vektör: Klavye çözümleme tablosu,

RIBUF 00F7-00F8 247-248 RS-232 giriş buffer'ının pointer'ı. ROBUF 00F9-00FA 249-250 RS-232 çıkış buffer'ının pointer'ı. FREKZP 00FB-00FE 251-254 Kullanıcı programları için zero-page boşluğu. Bu dört bayt'lık alan assembly dilinde zero-page indeks modu rutinleri yazmanız için sağlanmıştır. BASZPT 00FF 255 BASIC için geçici bilgi alanı. 256 ve 511 adresleri arasında kalan bellek alanı mikroişlemci yığını tarafından kullanılır. BASIC programları bu adresleri kullanmazlar.

0100-010A 256-266 Yazı saklama alanına kayma, BAD 010B-013E 267-318 Kaset girişi hata kütüğü. 26

013F-01FF 319-511 Bu alan yığın ve diğer sistem işlemleri tarafından kullanılır ve başka kullanımlara açık değildir.

BUF 0200-0258 512-600 Sistem giriş buffer'ı. Burası bilgisayara girdiğiniz bilgilerin gittiği yerdir. Başka bir yerde gerekli olduğu zamana kadar bilgiler, sadece burada kalır. Bundan sonraki üç adres yine BASIC programcılarına yararlı olmayan adresler. Bunlar, OPEN komutuyla açılmış kanalların parametrelerini saklıyorlar ve bu alana girişler sadece Kernal rutinleri tarafından yapılıyor. Aslında, görevleri 184-186 adresleriyle aynı ancak, dosya bilgilerinin sadece son açılan kanalla ilgili kısmını değil tüm içeriğini saklamaları bakımından onlardan ayrılıyorlar. Her biri 10 bayt tutuyor ve bu da bir kerede açabileceğiniz kanal sayısını açıklıyor. Daha fazla bilgi, Kernal konusunda anlatılacaktır.

LAT 0259-0262 601-610 Kernal tablosu: Aktif mantıksal dosya numaraları.

FAT 0263-026C 611-620 Kernal tablosu: Her bir dosya için cihaz numarası.

SAT 026D-0276 621-630 Kernal tablosu: Her bir dosya için ikinci adres.

KEYD 0277-0280 631-640 Klavye buffer sırası. Bu alan, klavyeden girilen karakterlerin geçici olarak saklandığı yerdir. Eğer karakterleri buraya kendiniz POKE eder ve adres 198'in değerini (buffer'daki karakter sayısını saklayan) değiştirirseniz bu karakterler, klavyeden yazılmış gibi görünürler. Adres 43 için daha önceden verdiğimiz programda bilgisayarın bir şeyler yazıldığını düşünmesini sağlamak için bu adresi kullandık.

MEMSTR 0281-0282 641-642 Pointer: Bellek işletim sisteminin alt sınırı. Normal değeri 2048,

MEMSIZ 0283-0284 643-644 Pointer: İşletim sistemi için belleğin üst sınırı. Normal değeri 40960. Bunlar, oldukça önemli iki adres. Görevleri programlarınızı yazmak için kullanılacak boşluğu kontrol etmek. Bu değerler GİRİŞ/ÇIKIŞ kontrol sicili tarafından (adres 1) bilgisayar açılırken belirlenirler ve her değişik bellek konfigürasyonunda değişir. Bu adresleri BASIC text'in bölümlerini yerleştiren 43-56 adresleriyle karıştırmayın. BASIC'te, bilgisayarın programınızın farklı kısımlarını nerede sakladığını bulmak için kullanılan pek çok pointer var. Bazen bunların nerede olduklarını bilmeniz gerekebiliyor. Eğer belleğin değişik kısımlarının konumunu değiştiren programlar yazıyorsanız, bu kısa program sizin işi-

10130
DERİ
00406
IF £
STÜP REH
POKE
15)
FOR TÜ 23
NEXT J
©8556 PRİNT
ALI
REH CİFT
08165 REM EY JİM BÜTTERFİELD
POKE S5 5
6091268
iĞULUL

nize yarayabilir. Yaptığı iş, bu pointer değerlerini düzenli bir şekilde size vermektir (Program 6). TIMOUT 0285 645 Flag: Seri IEEE bağlantısını açma/kapatma

COLOR 0286 646

O anki karakterin renk kodu. Normal açılış değeri 14 (açık mavi). 0'dan 15'e kadar olan değerleri bu adrese POKE ederek, kursorun renginin nasıl değiştiğini görebilirsiniz. Bu adresin kullanımı klavyedeki renk tuşlarının kullanımı gibidir.

GDCOL 0287 647 Kursorun altındaki arkaplan rengi

HIBASE 0288 648 Ekran belleğinin (sayfasının) başlangıcı. Burası, ekranın sayfa olarak normal yerini 256 bayt'lık kümeler halinde gösterir. Normalde bu değer 4'tür yani 256 x 4 = 1024, ekranın bellek alanı olarak başlangıç adresidir. Bu bilgiyi kullanarak birden fazla ekran yaratıp bu adrese girip çıkabilirsiniz. Aşağıdaki program iki ayrı ekran yaratıyor (Program 7)

Programı BASIC ile girip çalıştırın. Ekran, bir anda rastgele karakterlerle dolacaktır. Aslında baktığınız ekran bir bellek parçasıdır. Sonra, ekran temizlenecek ve orijinal hale dönecektir. Şimdi, buraya “EKRAN 1” yazın ve basın. Bundan sonra ekran temizlenerek yeni bir ekran açılacaktır. Buna “EKRAN 2” yazın. F1 tuşuna basarsanız “EKRAN 1”e dönebilirsiniz. Bu, çok sayfa yöntemi kelime-işlem programları ve oyunlarda oldukça sık kullanılır.

XMAX 0289 649 Klavye buffer'ının büyüklüğü. Normalde değeri 10'dur ve bu adresi 0-255 kadar değerlerle POKE etmek buffer'ın karakterleri kaybetmeden önce tutabileceği karakter sayısını kontrol eder. Eğer buffer'ı 0 ile POKE ederseniz herhangi bir harf saklayamaz. Bu yüzden, ekrana hiçbir şey yazılamayacaktır. RUN/STOP basarak normal duruma dönebilirsiniz. POKE 649,0 komutu klavyeyi kapattığından programlarınızda bunu, sadece joystick veya mouse ile giriş yapmak istiyorsanız kullanabilirsiniz.