COMMODORE 64'ün BELLEK HARİTASI-6

RPTFLG 028A — 650

Flag: Basılan tuşu tekrar etme, POKE 650,100, bütün tuşların tekrarını kapatırken, POKE 650,255 bütün tuşların kendisini tekrar etmesini sağlar. Normal değeri 0'dır (sadece boşluk tuşu kendini tekrar eder). Bu adres, özellikle tuşlarla çizim yapılan grafik programlarında işe yarayabilir.

KOUNT 028B — 651 Tekrarlama hızı sayacı. Normal değeri: 4. Bu adresi 0-255 değerleriyle POKE etmek, tuşların kendilerini tekrar etme hızını değiştirir. En yavaş olan değerler 0 ve 255'tir.

DELAY 028C

Tekrar gecikme sayacı.

Can ÖZTÜRK

SHFLAG 028D — 653 Flag: Klavyedeki CTRL, CBM ve shift tuşları. Bu adres, bu tuşlara basılıp basılmadığını belirtir.

Basılan tuş 653'ün değeri Shift 1 Commodore 2 CTRL 4

Eğer her üç tuş da aynı anda basılı iseler, bu adresin değeri 7 olur. Üç tuşa birden basmak alışılmamış bir şey olduğundan, bu özellikten güvenlik önlemi olarak yararlanabilirsiniz. Adresin değerinin nasıl değiştiğini görmek için aşağıdaki satırı deneyin: 10 GET A$: PRINT PEEK(653): IF A$="" THEN 10

TAZI

Ayrıca WAIT komutunu kullanarak 197. adreste olduğu gibi tuşları denetleyebilirsiniz. 1. WAIT 653,1,0 Shift için WAIT 2. WAIT 653,2,0 CBM için WAIT 3. WAIT 653,4,0 CTRL tuşu için WAIT

Amiga'ya benzer bir kullanım olan üç tuşa aynı anda basabilme özelliğini aşağıdaki programda inceleyelim (Program 1).

GAZETE

LSTSHF 028E — 654 Klavyenin son shift örneği.

KEYLOG 028F - 0290 655 - 656 Vektör: Klavye tablosu ayarlamaları. Normal değer: 60232.

MODE 0291 657

Flag: 0-Shift kapalı,

128 — Açık. Bu adres aslında shift tuşunu açıp kapatmaz sadece CHR$(8) girdiğinizde 128 veya CHR$(9) girdiğinizde 0 değerlerini gösterir.

AUTODN 0292 658 Flag: Aşağıya doğru otomatik kayma, 0 Aktif. 659'dan 670'e kadar olan adresleri, RS-232 portundan diğer bilgisayarlar, yazıcılar vb. yan gereçlerle iletişim kurması gereken programlarda kullanılır. BASIC programcıların bu adresleri çok nadir kullandıklarını düşünerek bu kısımları atlamayı daha uygun buluyorum. Ancak bir noktayı belirtmeden geçmeyeceğim. Eğer bu adresleri kullanmak istiyorsanız, OPEN komutu ile bir RS-232 kanalı açmanın otomatik olarak, RS-232 iletişimi sırasında data kaybını önlemekle görevli iki buffer için 512 bayt ayırdığını hatırlamalısınız. Programınız çok uzunsa, buffer'lar için gereken boşluk yüzünden programınızın son satırları kaybolabilir. Buna dikkat edin.

IROTMP 029F - 02A0 671 - 672 Bu iki adres, kasetten yapılan yüklemeler ve kayıtlar esnasında geçici olan IRQ vektörünü saklar. Eğer teyp çalışırken bir kesinti meydana gelirse işlem bitene kadar vektör adresi burada saklanır.

ENABL 02A1 673 RS-232 aktif.

02A2 — 674 Kasete bilgi giriş ve çıkışı sırasında kontrol.

02A3 675 Kaset okuması için geçici saklama. 02A4 676

Kaset okuması için geçici DIRQ sinyali.

677 Geçici satır indeksi. 02A6 678

PAL/NTSC için flag. 0- NTSC, 1-PAL.

PROGRAM ADI : PRG-I

0802860 PRINT BU PROGRAMI YÖKETMEK ICİN,
80216 PRINT SHİFT, KONTROL, VE CBM TUSLA
RINA <241>
80228 PRINT AYNI ANDA BASIN. <183>
00238 PRİNT
80246 PRINT PROGRAMI KURTARMAK İCİN,
08250 PRINT HİCBİRSEY YAPMAYIN.
00388 FOR BEKLE —- 1 TO 388
00318 IF PEEK(653) - 7 THEN 1088 <142>
80328 NEXT BEKLE <268>
00330 PRİNT PROGRAM KURTULDU! <157>
08348 END <088>
81088 PRINT PROGRAM YOKOLDU! <214>
21028 NEW <146>
PROGRAM ADI 1: PRG-2
0006106 <139>
80620 POKE FLAG AYARLAMASI <113>
08030 SYS YER <ese>
a PRINT KURSORUN BULUNDUĞU KONUM: <132>
80858 PRINT PEEKCX) <226>
PROGRAM ADI 1: PRG-3
86818 <139>
68026 INPUT KURSOR KONUMUNU YAZIN <X,Y)
YP <027>
00036 POKE P,8 a <198>
8 8 POKE Y,YP
60050 SYS YER:REM KERNAL”DA YER RUTİNİ <131>
lı 08868 PRINT MERHABA <194>
PROGRAM ADI 1 PRG-4
681868 <115>
691180 YER-S55201REM KERNAL YER ALTRUTINI <033>
00128 CHROUT-454981REM KERNAL CHROUT ALT
RUTİNİ <224>
68130 PRINT 3*POKE X,8 <255>
801486 FOR TO 25 <177>
08158 POKE P,G:REM FLAG'I SIFIRLA
00168 POKE Y,YP
00178 SYS YER <146>
801886 POKE GÖNDERME <139>
60198 SYS CHROUT <241>
80286 NEXT YP
PROGRAM ADI 1: PRG-5
©8865 REM -KAYIP KURSOR <esı>
8868607 REM -RUN YAPIP EKRANA YAZI YAZIN <093>
60010 A-788 <642>
©0020 KERNAL SCNKEY RUTİNİ <833>
060360 GE-65508:REM KERNAL GETİN RUTİNİ <262>
SYS SC:SYS GE
IF THEN PRİNT
A))I <019>
G60TO 28 <246>
02A7 -02FF 679 - 767 start).
Kullanılmıyor. ICRNCH

TERROR 0300 - 0301 768 - 769 Vektör: BASIC hata mesajını yazma. 770 ile 779 arasındaki adresler önemli çevrim fonksiyonlarının yer aldığı BASIC ROM bellek ile direkt ilişki halindedirler. TMAIN 0302 - 0303 770-771 Vektör: BASIC resetleme (warm)

0304 - 0305 772 - 773 Vektör: BASIC text'i işaretleme.

ILOP 0306 - 0307 774 - 775 Vektör: BASIC text listesi. POKE 775,200, herhangi birinin programınızı çalıştırdıktan sonra listesini görmesini önler. Ancak o da 775,167 yazarak listeyi eski haline getirmeyi akıl edebilir.

IGONE 0308 - 0309 776 - 777 Vektör: BASIC karakter gönderimi.

TEVAL 030A - 030B 778 - 779 Vektör: BASIC işaret değerlendirmesi.

SAREG 030C 780 6502 A sicili için veri saklama yeri. A akümülatörü.

SXREG 030D 781 6502 X sicili. SYREG 030E — 782 6502 Y sicili.

STREG 783 6502 SP sicili için veri saklama. SP yığın pointer'ı. Bu adresler 6502 dahili sicillerini denetlerler. Bir SYS komutuyla makine dili rutinlerine bilgi geçirmeden önce çeşitli değerlerle yüklenirler. Aşağıdaki dört program kursor pozisyonlarını saklama ve yeniden belirleme işlemlerini yapan rutinler olarak düşünülebilir. (Program 2) (Program 3) (Program 4) (Program 5) Bundan sonraki üç bayt BASIC'te yer alan USR(X) tarafından düzenlenen bilgiyi saklar. Zaman zaman, bunların kapsamlarını değiştirmek, argümanları assembly rutinlerine geçirirken yararlı olabilir.

USRPOK 0310 784 Bu bayt, atlama emri (JMP) için 6502 Op-kodunu saklar. Normal değeri 76 (4C-hex).

USRADD 0311 - 0312 785 - 786 USR(X) başlangıç adresinin alt ve üst bayt'ı.

0313 — 787 Kullanılmıyor.

CINV 0314 - 0315 788 - 789 Vektör: Donanım IRQ vektörü. IRQ (interrupt request - kesme ricası) rutinlerinin işleme konduğu adres. Normal değeri: 59953. STOP tuşu klavyede emin bir yerdedir ve pek öyle yanlışlıkla basılmaz. Ancak programınız çalışırken birisinin programınızı yanlışlıkla durdurmasını önlemek isterseniz RUN/STOP tuşunu aşağıdaki POKE ifadesini vererek kapatabilirsiniz:

POKE 788,52

Bu aynı zamanda saati de (TI ve TI$) durdurur bu yüzden programınızda zaman fonksiyonlarına ihtiyacınız varsa bu POKE ifadesini kullanmayın. POKE 788,49 saati ve RUN/STOP tuşunu açar. Daha fazla bilgi için 808 numaralı adrese bakın.

CBINV

0316 - 0317 790 - 791 Vektör: BRK (Kes) emri.

NMINV 0318 - 0319 792 - 793 Vektör: NMI rutininin işleme konacağı adres. Normal değeri 65095'tir. Aşağıdaki adresler 8K'lık Kernal içinde, yukarıdaki Kernal rutinlerinin başlama adresleri için atlama tablosudur. Kernal'ı daha sonra detaylı olarak inceleyeceğiz. Bu vektörleri kendi makine dili programlarınızda kullanabilirsiniz.

IOPEN 031A - 031B 794 - 795 Kernal OPEN rutini vektörü.

ICLOSE 031C - 031D 796 - 797 Kernal CLOSE rutini vektörü.

ICHKIN 031E - 031F 798 - 799 Kernal CHKIN rutini vektörü.

ICKOUT 0320 - 0321 800 - 801 Kernal CHKOUT rutini vektörü.

ICLRCH 0322 - 0323 802 - 803 Kernal CLRCHN rutini vektörü.

IBASIN 0324 - 0325 804 - 805 Kernal CHRIN rutini vektörü,

IBSOUT 0326 - 0327 806 - 807 Kernal CHROUT rutini vektörü,

ISTOP 0328 - 0329 808 - 809 Kernal Stop rutini vektörü. POKE 808,239 RUN/STOP tuşunu saati durdurmadan kapatır. Tuşu yeniden aktif hale getirmek için POKE 808,237 yazabilirsiniz. POKE 808,225 RUN/STOP ve RESTORE tuşlarının her ikisini de kapatır. Program bir kez çalıştığında, program kendisi durmadıkça veya POKE 808,237 komutu programda geçmedikçe, programdan çıkmanız mümkün değildir.

IGETIN 032A - 032B 810 - 811 Kernal GETIN rutini vektörü.

ICLALL 032C - 032D 812 - 813 Kernal CLALL rutini vektörü.

USRCMD 032E - 032F 814 - 815 Kullanıcı tanımlı vektör.

ILOAD 0330 - 0331 816 - 817 Kernal LOAD rutini vektörü. SYS komutuyla birlikte bu adresi kullanmak seri bir cihazdan yükleme işlemini başlatır. İlk program otomatik olarak yüklenir.

ISAVE 0332 - 0333 818 - 819 Kernal SAVE rutini vektörü. Çalışması yukarıdaki adres gibidir.

0334 - 033B 820 - 827 Kullanılmıyor.

TBUFFER 033C - 03FB 828 - 1019 Teyp I/O buffer'ı. Kasetteki programlar yüklenirken, önce buraya gelirler. Burası aynı zamanda sprite (yaratık) bilgilerinin saklandığı yerdir.

PROGRAM ADI : PRG-6
6818686 PRINT CHR$< 147) <129>
©8118 REM - 1824, EKRAN
126 REM - BASLANGICIDIR.
00130 B—-1024 <223>
80146 REM - 55296 EKRAN RENGI <231>
68150 REM - BASLANGICIDIR.
00160 <215>
601786 REM - 4. SATIR, 15. SUTUNA <634>
60186 REM - MAVI KOYALIM. <141>
001986 POKE <216>
00200 POKE Bt15148X4,B3 <638>

STilI

Ekranda bir sprite varken herhangi bir program yüklendikten sonra sprite'ın bozulduğunu fark edeceksiniz. Bunun nedeni, teypten gelen bilgilerin sprite bilgilerini değiştirmesidir. 03FC - 03FF 1020 - 1023 Kullanılmıyor.

Ekran Bilgi Bölgesi

VICSCN 0400 - OTET

Bu geniş alan, bilginin ekranda görülebilmesi için konması gereken yerdir. Bilgisayar bunu otomatik olarak yapar. Bunu kendiniz de POKE komutunu kullanarak deneyebilirsiniz. Örneğin POKE 1024,81 ekranın sol üst köşesine bir kalp işareti koyar. POKE 55296,7 bu kalbi sarıya döndürür. 1024'ten 2023'e kadar her ekran adresinin 55296'dan 56295'e karşı gelen bir renk adresi vardır. Ekran 1000 konum yani 25 satır 40 sütundan meydana gelir. Belli bir satır ve sütuna yazmak için şu formülü kullanın: Konum = 1024 + Sütun numarası + 40 * Satır numarası. Bu örnek program, 4. satır, 15. konuma mavi bir kalp koyacaktır (Program 6). İlk çıkan 64'lerde ekranı POKE edilen bütün karakterler beyaz oluyordu. Yeni makinelerde ise bu açık mavi yani arka plan renginde. Bu yüzden renk konumunu da değiştirmemiz gerekiyor. Bunun formülü; Renk Konumu = 55296 + Sütun numarası + 40 * Satır numarası.

07F8 - 07FF 2040 - 2047 Sprite bilgi pointer'ları. Bu belirteçler bilgisayarın sprite yapan bölümüne bilgi için nereye bakması gerektiğini gösterirler. Örneğin: POKE 2040,13, bilgisayara, sprite 0 ile bilgilerin 13. blokta bulunduğunu anlatır. POKE 2043,192'de 3. sprite bilgilerinin 192. blokta yer aldığını bildirir. Bu bloklara daha sonra etraflıca değineceğiz. 0800 - 9FFF 2048 - 40959 BASIC programlarınızın saklandığı RAM. Bu alanı 43-46 adreslerini kullanarak daraltabilirsiniz. Bu kullanışlı yeniden numaralama rutini (program 7), belleğin bu kısmındaki satır numaralarının nerede olduğunu bulduktan sonra hepsini değiştirerek programı daha düzgün bir hale sokar. Ancak GOTO ve GOSUB'ların sonlarındaki satır numaralarını kendiniz değiştirmek zorundasınız. Programınızı yeniden numaralamak için aşağıdaki yolları takip edin: 1) POKE 43, PEEK(45) - 2 : POKE 44, PEEK(46) : CLR yazıp return'e basın.

2) Aşağıdaki programı yazın veya yükleyin. 3) POKE 43,1 : POKE 44,8

4) RUN 10000 yazın ve return'e basın. (Program 7) Son programımız bir kısaltıcı ya da sık kullanılan deyimiyle bir cruncher. Yaptığı iş BASIC programınızı mümkün olduğu kadar az satıra sıkıştırarak, bir parça daha hızlı ve daha az bellek harcar hale getirmek. Tabii bu arada programınız daha az okunaklı hale gelecek. Programınızı crunch etmeden önce mutlaka normal bir versiyonunu saklayın. Programınızda hata varsa bunu crunch edilmemiş programda daha rahat bulabilirsiniz. (Program 8) Bu programı kullanmak için önce bu programı yükleyin, sonra da onu gizlemek için yukarıda anlatılan metodu uygulayın. Ardından, crunch etmek istediğiniz programı yükleyin. POKE 43,1: POKE 44,8 ile cruncher programınız çalışmaya hazır hale gelecektir.

8000 - 9FFF 32768 - 40959 VSP (Video/Sound Package) kartuşu için ROM - 8192 bayt. Bu kartuş, BASIC 2.0'ın eksikliğinden dolayı Commodore'un bir zamanlar ses ve sprite programlamayı kolaylaştırmak için çıkarmayı düşündüğü bir projeydi. Bellek kaybı yüzünden bu proje asla uygulamaya konmadı.

A000 - BEFF 40960 - 49151 Burası BASIC'in oturduğu yerdir. 1 numaralı adresi kullanarak geçici bir süre için BASIC'i yok etmek mümkündür ancak çoğumuz böyle bir şeye teşebbüs etme ihtiyacı duymazken BASIC'e ihtiyaç duymayan makine dili programcıları bunu gerçekleştirebilirler. Evet, böylelikle 0'dan başlayıp 49151 numaralı adrese gelmiş bulunuyoruz ki bu da yeni bir başlangıcı temsil ediyor. Gelecek aydan itibaren 64'ün grafik ve ses bölgelerini incelemeye başlayacağız.

PROGRAM ADI PRG-7
09998 END <es6>
18660 REM RENUMBER <es1>
10018
18020 IF PEEKCY6*3)m6 AND PEEK(Y6*4)-39 T
HEN END
10030 Y6
<133>
16040 IF THEN
16046 <165>
100586 10620
PROGRAM ADI : PRG-8
68881 INPUT BASLANGIC,BITIS SATIRI $L»Ur:
45) #BKPEEKC 46)-
4 <224>
00002
00083 IF LT<L THEN C-PEEKCC)*BXPEEKCC*1) 1
2 <es1>
00804 IF LT>L THEN PRİNT SATIR BULUNAMAD
08005 <173>
00804 THEN &
00007 İF THEN END <158>
00008 LT; <142>
00009 IF LTDU THEN C-Cti:POKE BAGLA,C-INT
5
00818 POKE CyASCC 1 TO
EK(J44)
00811 POKE & <246>