COMMODORE 64'ün BELLEK HARİTASI-8
Retro bilgisayar53265 Bu adres, kullanımı açısından, daha çok orta ve ileri düzeydeki programcıları ilgilendiriyor. Bir sicil olan bu adresin her bit'i değişik grafik modlarına göre açılıp kapatılır. Bunu bir grafik kontrol kutusu gibi görebilirsiniz. BİT 6 - UZANTILI RENK MODU
Bu modda her karakter kendi rengine ek olarak bir arkaplan rengi alır. Ekran renginiz de bunlardan değişik olabilir, böylece sarı bir ekranda yeşil bir arkaplanı olan beyaz bir karakter gösterebilirsiniz. Fakat bu modda bir sınırlama var. Karakter kodunun sadece ilk 64 karakterini kullanabilirsiniz. BİT 5 - BITMAP MODU
Eğer elinize bir büyüteç alıp ekrana bakacak olursanız ekranı renklerle dolduran pikselleri oluşturan çok sayıda fosfor noktası görürsünüz. Bu, grafikler için kullanılabilecek en ayrıntılı grafik modudur. Standart bitmap modunda her 8 x 8 bit karakteri için iki renk seçimiyle 320 x 200 çözünürlüğe sahipsiniz. “YÜKSEK ÇÖZÜNÜRLÜK BITMAP MODUNU AÇ POKE 53265, PEEK (53265) OR 32
YÜKSEK ÇÖZÜNÜRLÜK
BITMAP MODUNU KAPAT
POKE 53265, PEEK (53265)
AND 233
Aşağıdaki program örneğinde düz bir arkaplana bir spiral çiziliyor. Önce ekran kararıyor sonra yavaşça aydınlanıyor. Ardından mavimsi bir arkaplan meydana geliyor ve spiral yerleştiriliyor. Bu işlem bittiğinde sol üst köşede siyah bir kare beliriyor. Normal ekrana dönmek için RUN/STOP ve RESTORE'a basın (Program 1). Ekrandaki pikselleri tek tek nasıl açıp kapatabilirsiniz? Ekran boyutlarının 40 sütun ve 25 satır olduğunu herhalde hatırlıyorsunuzdur. Bu da ekrana 1000 karakter yazılabileceğini gösterir. Şimdi bu yerlerden her birine KARAKTER POZİSYONU diyelim. Sonra açmak istediğiniz piksel için şu formülü kullanın: Önce karakter pozisyonunu bulmak için,
KARAKTER POZİSYONU = INT (X/8) + 40 * INT (Y/8)
X ve Y burada açmak istediğiniz pikselin yatay ve düşey koordinatlarıdır. X, 0 ile 320 Y ise 0 ile 190 arasında bir sayı olacaktır.
SATIR = (Y/8 - INT(Y/8))*8
Buradan da X,Y'nin hangi bayt içinde yer aldığını bulmak için:
BAYT = 1024 + KARAKTER P.*8 + SATIR
Değişecek olan bit ise Son olarak bit'i yakmak için
POKE BAYT, PEEK (BAYT) OR (2^BİT)
BİT 4 - EKRANI KAPATMA
Ekranda yazılı herhangi bir şeyi POKE 53265, PEEK (53265) AND 239 ile görünmez hale getirebilirsiniz. Ekran sınır rengiyle aynı olacaktır. POKE 53265, PEEK (53265) OR 16 ekranı yeniden görünebilir hale getirir. Bu adresi kullanarak ekranı kapattıktan sonra mesajları ve grafikleri ekrana koyup bir anda hepsini birden ekranda gösterebilirsiniz. Aşağıdaki program: 1) Ekranı kapatır. 2) Bir mesaj yazar. 3) Ekranı yeniden açar.
(Program 2) BİT 2-0 - KAYDIRMA
Ekrandaki bilgileri, dört yönden biri yönünde 1-8 piksel arasında hızlarda hareket ettirerek kaydırabilirsiniz. Bunu yaparken ekran büyüklüğünü kaydırma yapmak istediğiniz yöne bağlı olarak 40'tan 39 sütuna ve
PROGRAM ADI 1
081008 PRINT CRRS<C147)
01810 PRINT <094>
©1020 PRİNT
01048 PRINT “SPİRAL EGRİ TAMAMLANDIĞINDA <188>
01050 PRINT “SOL UST KARA BİR <167>
01060 PRINT "KUTU BELRECEK." <115>
81078 PRINT <156)>
01088 PRİNT “NORMAL EKRANA DÖNMEK ICİN" <048)>
01090 PRINT "RUN/STOPR RESTORE TUSLARINA B
ASIN" <216>
©1109 PRINT e <186>
©1120 PRINT <206>
01136 PRİNT "BASLAMAK ICIN HERHANGİ BİR T
USA BASIN"
©1140 GET THEN 1148
01150 PRİNT CHRS<147) <163>
81160 REM --81920EKI BITMAP <137>
01170 S327R
OR 8 <145>
01180 REM --BITMAP MODUNA GİR <a217>
01190 POKE OR 32 <a1a>
01200 REM --BITMAP'I BOSALT <ısa>
81210 FOR I-BASE TO BASE*79881POKE
XT <165>
REM --ARKARLAN VE SINIR RENKLERİNİ
ş AYARLA <157>
©1230 POKE “SINIR SIYAN <a03>
FOR 141024 TO 2O231ROKE
01250 REM --EGRİ EKRANI DOLDURACAK <146>
©1260 FOR S-0 TO 17 STEP 30 <093>
B1270
01280 <184>
©1280 <058)
01300 <a2s>
01316 AND 7 <167>
01320
01330 BI-7-(X AND 7)
01340 POKE BY.PEEKCBY) OR <a24>
01350. NEXT 8S
01368 ROKE 1024.16 <e7a>
©1370 GOTO 1378 <056>
PROGRAM ADI 1 PRG-2 iz
00010 PRİNT CHRSC147) & <039>
©8020 "ISTE * <asa>
©0030 PRİNT "SİMDİLİK EYVALLAH"
©0040 FOR TO
80050 POKE 53265.PEEKC53265) AND 238 <a38>
PRİNT
©8870 "GERİ DONDUM!" <165>
©0080 FOR TO 10081NEKT <165>
©0030 POKE OR 16 <154>
25'ten 24 satıra indirin. Bu işlem ekranı kaydırmadan önce bilgisayara bilgiyi toplayıp sıraya koymak için yer sağlayacaktır. Gerçekten net bir kaydırma yapmak için bir makine dili rutinine ihtiyacınız olacak. Bu rutin olmadan kaydırmayı sadece yazı ve klavye karakterleri üzerinde gerçekleştirebilirsiniz (Program 3). BİT 3 - 24/25 SATIR SEÇİMİ
Bu bit'i POKE ile kapatırsanız ekranınız 24 satır olur. Bu bit kaydırma modu için kullanılmakta. Ekranın hem üst hem de altından yarım satır alınıyor. Bunu kontrol etmek için POKE 53265, PEEK (53265) AND 247 (24 Satır)
PROGRAM ADI 1 PRG-3
61000 1
©1040 DIM C<8,B)1REM KARAKTER MATRISI
©1050 1 <810>
©1060 REM EKRANI UFALT <108>
©1070 POKE AND 247 <a18>
©1088 1
81088 REM KARAKTERİ SAKLA
81100 FOR Izi TO 8 <e58>
©1116 FOR Js1 TO 8
©1120 READ C<1.J)> <164>
011830 NEKT J.1 <185>
91148 1
©1150 REM EKRANI TEMİZLE/BEYAZ KURSOR <155>
©1180 RRINT
01170 1 <130>
01180 REM KURSORU DIBE KOY <875>
01198 FOR TO 241PRİNT <157)>
1 <160>
REM ILK KAYMA ICİN POZİSYON
©1220 POKE AND 248)4*7 <145>
61230 « <188>
©1240 REM KARAKTER MATRISI
01250 FOR Ks1 TO 8 <a2a>
©1260 FOR TO 8 <aa2>
01278 IF C<K.L)<8 THEN PRİNT CHR$C16)7 <ısa>
01275 PRINT <e24>
01280 PRİNT
©1290 NEKT L
01300 PRİNT <iaa>
81310 NEXT K <140>
01326 PRINT <ısa>
©1336 1 <036>
©1340 REM 8 BIT KAYMA <ı26>
'01350 FOR TO 7? <a205>
01360 POKE AND 246)4P -<056>
©1370 * <076>
01388 1 <8686>
01390 FOR WHs8 TO 581NEKT W <148>
©1400 NEXT P <a814>
81410 1 <116>
©1420 REM TEKRARLA
©1430 GOTO 1228 <196>
01440 1 <146>
01450 REM KARAKTER DATA <a14>
01460 DATA 32.32.32,-32.-32.-32.32.32 <o32>
01470 DATA 32,32.-32,-32.32.-32.-32.32 <a245>
01480 DATA 32,-32,-32.-32.-32.-32.-32.-32 <096>
01490 DATA 32.32.-32.,-32,-32.-30,-32.32 — <005>
©1500 DATA 32.32,-32.32.32.32.-32.32
01510 DATA 32.32.,-32.32.32.32.-32.32 <036>
61520 DATA 32,32.-32,32.32,32.-32.32 <046>
01530 DATA
POKE 53265, PEEK (53265) OR 8 (25 Satır)
$D012 53266 (V 4 18) Karşılaştırma için raster değerini okuma/yazma.
Raster sicili iki amaçlıdır. Bu sicil size o anki raster pozisyonunun sağdan sekiz bit'ini verecektir. En önemli bit'in raster pozisyonu 53265'tedir. Raster sicili, yatay ve düşey kaydırmalarda görüntüdeki zamanlama değişiklikleri için, karışık modlu görüntü (yüksek çözünürlükte karakterler) ve diğer interrupt çeşitleri için kullanılır. Ekrandaki değişiklikler, raster ekranın görünebilir kısmında değilken yapılmalıdır. Görünebilir kısımlar 51 ve 251 arasındadır.
$D013 53267 (V + 19) Light-pen X pozisyonu. $D014
53268 (V + 20) Light-pen Y pozisyonu.
Bu adresler light-pen'in ekrandaki yerini gösterirler. Kalemden ayrıca interruptlar elde edilebilir. $D015
53269 (V + 21) Sprite gösterimi
Bir sprite'ı görünebilir hale getirmek istiyorsanız buraya başvurmalısınız. Burada her bit bir sprite'ı kontrol eder. Yani sprite 0, bit 0, sprite
1, bit 1 vb. tarafından kontrol edilir. Sprite 4'ü ekranda görünebilir hale getirmek için: POKE 53269, PEEK (53269) OR 16
POKE 53269, PEEK (53269) AND (255-16) sadece sprite görünmez hale getirir. POKE 53269, PEEK (53269) OR 170 Sprite 1, 3, 5 ve 7'yi ekrana getirir. POKE 53269, PEEK (53269) AND (255-170) hepsini yok eder.
$D016 - VIC kontrol sicili. 7-6 kullanılmıyor 5 kullanılmıyor 4 çok-renklilik modu 1-açık 3 38/40 kolon yazı: 1-40 kolon 2-0 X pozisyonuna düz kaydırma
Bu adres de çoğunlukla usta grafik kullanıcıları tarafından ziyaret ediliyor. BİT 4 - ÇOK-RENKLİLİK MODU Yazı için çok-renklilik modunu
POKE 53270, PEEK (53270) OR 16 ile açıp
POKE 53270, PEEK (53270) AND 239 ile kapatabilirsiniz. Normalde her 1000 ekran pozisyonunun veya bloğun, bir arkaplan rengi veya bir yazı rengi olmak üzere sadece iki rengi olabilir. Örneğin, bilgisayarınızı açtığınızda her bloğun arkaplan rengi koyu mavi, yazı rengi ise açık mavidir. Bu adresi POKE ederek iki adet fazladan renk kazanabilirsiniz. Böylece bir ekran rengi (adr. 53281) ve üç karakter rengine sahip oluyorsunuz (adr. 53281-53284). Fakat bazı dezavantajlarınız var. Çok-renklilik modu sadece karakter setinin ilk 64 karakteri ile çalışıyor ve renkleri tarif edebilmek için aşağıdaki iki bit'e ihtiyaç duyuyor. (Şekil 1)
%00000000 76543210
Ekrana yazılan her harf aslında içinde bazı pixeller açık bazılarıysa kapalı olan 8 x 8 pixellik bloklardır. Açık olan pixeller gördüğünüz harfi meydana getirir. Yukarıdaki örnek pixel satırında 1, 4, 6 ve 7 numaralı pixeller açıktır. Çok-renklilik modunda bunlar çiftler halindedir. (Şekil 2)
© Ol |O (e) e. 76) 15 4) (3 2) (1 O A B Cc D
A kutusu bilgisayara rengi arkaplan 2'den (adr. 53283) almasını söyler. B gerekli bilgiyi ekran rengi olan 0'dan (adr. 53281) alır. C rengin arkaplan 1'den (adr. 53282) geldiğini belirtir ve D kendisi için gerekli bilgiyi 55296-56295 arasında her ekran konumu için farklı olarak alır. Bu iki-bit halinde okuma nedeniyle ekran çözünürlüğü azalırken renk sayısı artacaktır.
ÇOK-RENKLİ BİTMAP MODU
Burada iki adres birden yetkili: 53270 ve 53265. Yukarıda olduğu gibi mod için de aynı bit-çifti prensipleri kullanılmakta. Etkin hale getirmek için:
POKE 53270, PEEK (53270) OR 16
POKE 53265, PEEK (53265) OR 32
Yatay çözünürlüğün azaldığını unutmayın.
BİT 3 - 38/40 KOLON MODU SEÇİMİ Bu bit'i 0 ile POKE etmek ekran alanını daraltacaktır. Düzgün bir kaydırma işleminden önce bu yolla ekranın her iki yanında boşluk kazanabilirsiniz. BİT 2 - KAYDIRMA Program 2'ye 1365 POKE 53270, (PEEK (53270) AND 248)+P satırını ekleyerek Sprite'ı çapraz kaydırabilirsiniz. Tabii yine gerçekten düzgün bir kaydırma yapmak için bir makine dili rutini gerekli olacak. 53265 adresindeki BASIC örnek sadece yazı ve klavye grafik karakterleri kaydırmanız içindir.
$D017 53271 (V 4-23) 0-7 arasındaki sprite'ları dikey olarak iki katı büyütme.
Sprite — 0'ı büyütmek için:
POKE 53271, PEEK (53271) OR 1
Sprite'ı normal büyüklüğüne döndürmek için:
POKE 53271, PEEK (53271) AND
(255-1)
7 ve 1 için: POKE 53271, PEEK (53271) OR 130 komutlarını verebilirsiniz.
$D018 53272 (V 4-24)
1 sprite'larını büyütmek
VIC belleği kontrol sicili 7-4 video matrix taban adresi (VIC içinde) 3-1 karakter noktadata taban adresi (VIC içinde) Hem ekran hem de karakter belleğinden bu adres sorumludur.
POKE 53272,23 ekranı küçük karakterlere
POKE 53272,21 ekranı büyük karakterlere döndürür. Bu adresle ilgili bir kullanım daha önce 648 numaralı adreste gösterilmişti. Aynı zamanda ekran bellek adresi olan 53272'nin son dört biti bu işi üzerine almıştır. Ekranın yerini değiştirmek için şu komutu kullanın: POKE 53272, (PEEK (53272) AND 15) OR A
A, aşağıdaki tablodaki ondalık sayılardan biri olabilir. (Şekil 3)
A Adres — | Heksadesimal n o | 30000 16 1024 80400 32 2048 80800 48 3072 80000 64 4096 $1000 80 5120 $1400 96 6144 n112 7168 $1000 128 8192 82000 144 9216 82400 160 10240 82800 176 11264 82000 .192 12288 83000 208 13312 83400 224 14336 83800 240 15360 83000.
Normalde, A'nın değeri 16'dır ve ekran 1024'ten başlar. Kendi karakter setinizi yaratmak için — 3-1 numaralı bitleri değiştirme- POKE 53272, (PEEK(53272) AND 240) OR B
B'yi aşağıdan ondalık bir sayı olarak seçebilirsiniz. (Şekil 4)
B normal olarak 4'e ayarlıdır.
DO19
53273 (V-425) VIC Interrupt flag sicili (bit - 1:IRQ) 7 herhangi bir VIC IRQ şartına ayarlı 3 light-pen ile başlatılan IRQ flag'ı 2 sprite-sprite çarpışması IRQ flag'ı 1 sprite-arkaplan çarpışması IRQ
Bu adres en iyi olarak makine dili programlarıyla kullanılabilir, çünkü buradaki değerler BASIC için fazla hızlı değişmekte.
$D01A 53274 (V 4-26) IRQ saklama sicili. 1—interrupt açık
Bu adres de yukarıdakine benzemektedir. Interrupt açma sicilindeki ilgili bit, 1'e eşit olmadıkça o kaynaktan herhangi bir interrupt meydana gelmeyecektir. Bunu tecrübe etmeden önce makine kodunuzu geliştirin.
$D01B 53275 (V 4-27) Sprite'a karşı arka plan görüntü önceliği: 1
Sprite'ları yazılı karakterlerin önünden veya arkasından geçirmek için bu adresi kullanabilirsiniz. POKE 53275, PEEK (53275) OR 2
Sprite — 1'in ekranda grafik ve yazıların arkasından geçeceği anlamına gelir. POKE 53275, PEEK (53275) OR 7 aynı şeyi sprite 0, 1 ve 2 için yapacaktır. POKE 53275, PEEK (53275) AND (255-7), 0, 1 ve 2 numaralı sprite'ları yazının önüne koyacaktır.
D016 53276 (V 4-29) 0-7 numaralı sprite'lar için çok-renklilik modu seçimi. 1=çok-renkli
Bu adresi POKE ederek üç renkli sprite'lar yaratabilirsiniz. POKE 53276,1 komutu sprite 0'ı çok-renklilik moduna geçirir. Seçilen üç renk, 53287-53294 arasındaki sprite rengi adreslerinden ve 53285-53286 çok-renklilik adreslerinden gelir. D017 53277 (V 4-29) 0-7 numaralı sprite'lar için yatay iki kat büyütme. 53271 gibi burası da sprite'ı yatay olarak genişletir. POKE 53277, PEEK (53277) OR 1 sprite 0'ı iki katı genişletir. POKE 53277, PEEK (53277) OR 18 1 ve 4 numaralı sprite'ları genişletir. 53278 (V 4-30) Sprite-sprite çarpışma kontrolü. Eğer bir sprite başka bir sprite'a 26
PROGRAM ADI 1 PRG-4
©8100 PRINT CHR$<147) <1a2s>
©0118 FOR Az8 TO 15 <165>
©8120 FOR TO 15 <183>
00130 POKE 53288.A <a14>
©0140 POKE 53281.B <098>
060150 CsB <asa>
60168 IF Cs15 THEN Cs8 <183>
©8178 POKE 646.C41
08188 PRINT CHRS$<198) <a26>
081898 FOR Ds1 TO 1İ21PRINT D
©0280 PRINT "MERHABA!" <104)>
©6210 FOR Esi TO 3081NEKT E <245>
©8220 NEXT B <248>
©0238 NEKT A
değerse o sprite'ın bit'i açılır. IF PEEK (53278)=1 THEN bu adresin tipik bir kullanımıdır. Bu satırda sprite 0'ın başka bir sprite'a çarpıp çarpmadığına bakılır. Burayı bir kez PEEK yaptığınızda sicil kendisini 0'a resetler. Sicilin değerini bir değişkene saklamak akıllıca olabilir. IF PEEK (53278) THEN B=1
D01F 53279 (V 4-31) Sprite-arkaplan çarpışma kontrolü.
Görevi bakımından önceki adrese benzeyen bu adres bir sprite'ın yazı veya grafik ile çarpışmasını kontrol eder. Ayrıca sicil kendisini yukarıda olduğu gibi okunduktan sonra 0'a resetler. Eğer PEEK (53279) yapıp 128 sonucunu alırsanız 7 numaralı sprite'ın bazı karakterlerle çarpıştığını çıkarabilirsiniz.
D020 53280 (V 4-32) Sınır rengi. Normalde değeri 14.
Bu adresi 0'dan 15'e kadar sayılarla POKE etmek sınır rengini değiştirecektir. Adı geçen renkleri kullanım kılavuzunda bulabilirsiniz.
D021 53281 (V 4-33) Arkaplan rengi 0.
Hem arkaplan rengini hem de ekran rengini belirten bu adres bilgisayar açıldığında veya RUN/STOP RESTORE'dan sonra 6 değerini verir. Aşağıdaki programla ekran ve sınır renklerinin değişik kombinasyonlarını görebilirsiniz (Program 4). 53282 (V 4-34) Arkaplan rengi 1.
53283 (V 4-35) Arkaplan rengi 2. 53284 (V 4-36) Arkaplan rengi 3.
Bunlar 53265 ve 53270 adreslerindeki çok-renklilik modlarıyla kullanılan renk sicilleridir. Kullanmak istediğiniz renklere sayıları POKE edin. Daha fazla bilgi için 53270 adresine bakabilirsiniz.
D025 - D026 53285 (V 4-37) Sprite çok-renklilik sicili 0. 53286 (V 4-38) Sprite çok-renklilik sicili 1. Sprite çok-renklilik modu seçildiğinde bu sicillerdeki renkler normal sprite rengine (adr. 53287-53294) ek olarak kullanılır. D027 - D02E 53287 (V 4-39) Sprite 0 rengi. 53288 (V 4-40) Sprite 1 rengi. 53289 (V 4-41) Sprite 2 rengi. 53290 (V 4-42) Sprite 3 rengi. 53291 (V 4-43) Sprite 4 rengi. 53292 (V 4-44) Sprite 5 rengi. 53293 (V 4-45) Sprite 6 rengi. 53294 (V 4-46) Sprite 7 rengi. Bu adreslerin her biri renk sicilidir. Bu siciller baştan aşağıdaki renkleri alırlar. Eğer buraya bir renk POKE etmezseniz sprite'ların renkleri şöyle olacaktır. (Şekil 5)
Sprite Renkler
Gri 2