Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
Sayfa: 1 ... 4 5 [6]   Aşağı git
Yazdır
Gönderen Konu: c64 resim yapma  (Okunma Sayısı 63018 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #75 : Aralık 21, 2012, 17:33:51 ÖS »

10 poke 53265,59
20 poke 53270,184
30 poke 53272,24
40 for i=0 to 1
50 poke 1024+i,rnd(1)*256
60 poke 55296+i,rnd(1)*256
70 next i
80 for i=0 to 9
85 read bak
90 poke 8192+i,bak
100 next i
110 data 24,60,102,126,102,102,102

00011000 24
00111100 60
01100110 102
01111110 126
01100110 102
01100110 102
01100110 102
00000000 0
skate abii senin verdiğin rndom piksel basma programı ile şöyle bişey yaptım belkide aptalca bişey bilmiyorum ama  dataları nasıl yacağımı anlamaya çalışıyorum
bu şekilde ust kösede a yı andıran bir şekil çıktı
yukarıdaki bitleri çözümlersek

01100110 bu bitleri ele alırsak
01=arkapilan rengi(butun hucrelerde aynı olmalı)
10=1.renk
01=2.renk
10=3.renk
bu mantığa göre benim yazdığım datalar yanlış çünkü 01100110 biti bir piksel için bütün 4 rengi de aktif ediyor
anlıyomuyum hocam senin düzeltmek istediğin varmı
Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #76 : Aralık 21, 2012, 18:54:50 ÖS »

10 poke 53265,59
20 poke 53270,184
30 poke 53272,24
40 for i=0 to 1023
50 poke 1024+i,rnd(1)*256
60 poke 55296+i,rnd(1)*256
70 next i
80 for i=0 to 8191
90 poke 8192+i,rnd(1)*256
100 next i
konuları okudukça aklım daha çok karışıyor


60 poke 55296+i,rnd(1)*256
 neyi ifade ediyor bu 4*8 piksellik hucrede
arka pilan rengini mi ifade ediyor eğer öyleyse arka plan butun hucrelerde aynı olmalı diye bir kural yokmu bu kodu çıkarınca programda bir fark görmuyorum bunun anlamı arka planın tamamının uzerine baska piksel basıldığınımı anlamalıyım


poke 8192+i,rnd(1)*256

ekrana rengarenk pikseller basıyor ama  bu bir hucrede arka plan hariç 3 renk kuralını nasıl ihlal etmiyor
8192 den başlıyarak her belleğe 1 bayt veri yukluyoruz
00000000 dan 11111111 e kadar bununu açılımı
01=arkapilan rengi(butun hucrelerde aynı olmalı)
10=1.renk
01=2.renk
10=3.renk
bu şekilde olmadığı kesin bana bu bitlerin anlamını söylermisin dataları yazmam için bunları bilmeliyim skate abii help me


ayrıca neden 8192 ye kadar dongu var 8000byte yokmuydu
(160x200x2)/8=8000 byte

« Son Düzenleme: Aralık 21, 2012, 19:03:17 ÖS Gönderen: censez41 » Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #77 : Aralık 22, 2012, 04:39:42 ÖÖ »

şu kadarını söyliim, anlamaya başladın ve artık doğru yola girdin diyebilirim.

iki mesajına sırayla cevap.

1) for i = 0 to 9 yerine 0 to 6 kullanman lazım. toplam 7 data var ve bu 1 to 7 ya da 0 to 6 ile ifade edilir. sonrasında "out of data error" alırsın. bu hata mesajını grafik ekranındayken göremezsin ama mesaj her halikarda çıkar ve grafiğin bir bölümünün renklerini bozar. bu nedenle öncelikle kaç adet veri varsa o kadarlık bir döngü yapman gerektiği kuralını unutma.

multicolor modeda olduğun için A harfi olması gerektiği gibi çıkmıyor. poke 53270,184 yerine poke 53270,200 yazmayı dener ya da bilgisayar zaten tek renk modunda başladığı için 20 numaralı satırı tamamen silersen (20 yazıp enter'a basman yeterli), A harfi düzgün gözükecektir. İstersen multicolor'a uygun bir A çizmeyi de deneyebilirsin.

2) Kafanın karışması normal. Çünkü bir arkaplan ve 3 karakter rengi var. Ne neyi ifade ediyor ilk bakışta anlamak güç.

Öncelikle arkaplan tüm karakterlerde ortak ve $d021 (53281) adresi ile kontrol ediliyor. poke 53281,x (x: 0-15 arası bir sayı) şeklinde arkaplan rengini değiştirebilirsin. tek renk modunda arkaplan rengi tamamen video memory yani bu koddaki "poke 1024..." bölümünden alınmaktadır. Ancak çok renkli modda 53281 adresi tüm ekran için ortak renk belirler.

Peki diğer 3 renkten ne haber? Öncelikle şunu düşünmemiz lazım. 1 byte'ın kapasitesi nedir ve commodore'da kaç renk vardır? 1 byte 0-255 arası 256 değer alabilir (2^8) ve Commdore 16 renktir (2^4). Bu durumda 1 byte kaç farklı değer tutabilir? Cevap: 2. 16*16 = 256 ya da diğer bir deyişle 2^4*2^4=2^8 olduğu için 1 byte 0-15 arası değerlerden tam olarak iki tane barındırabilir ve kapasitesi tam olarak dolar.

Bu açıklamadan sonra nibble kavramına geçmek istiyorum. 1 byte kaç bittir? 8. Peki nibble dediğimiz şey nedir? 1 byte'ın yarı kapasitesi, yani 4 bit. Tam olarak da c64 renklerinin ihtiyacı olan boyut.

Byte'ımız şu olsun

%11011001

Bu byte'ı tam ortadan ikiye ayıralım.

%1101 %1001

Bu iki parça byte'ın nibblelarıdır. Yani üst 4 bit ve alt 4 bit. Her ikisi birer rengi ifade edebilir. İşte video memory'deki bu iki parça birer renk ifade eder.

Bildiğin gibi 16'lı sayı sistemi, yani hexadecimal sayı sistemi 0-F aralığında bir basamak için 16 farklı değere sahip olur, sonrası için 2., 3. v.s. basamaklar devreye girer. 16'lı sayı sisteminin tek basamağı tam olarak bir nibble'a tekabül eder.

Örneğin biz 1024'deki video memory'e onlu sayı sistemine göre 103 yazdık. Bu hangi iki renge denk gelir ilk bakışta görmek zor. Çevirim yapmak lazım. Yani;

103 / 16 = 6 (kalan 7)

Bu bölme işleminin sonucu üst nibble'ın değerini verir. Yani 6 (mavi) rengine denk gelir. Alt nibble ise bölümden kalan sonuçtur. Ya da diğer bir hesap yöntemiyle bölümün tam sayı sonucunu bulduktan sonra;

103 - (16 * 6) = 103 - 96 = 7

şeklinde bulunabilir. Bu da alt nibble, yani 7 (sarı) rengi olduğunu gösterir. Demek ki biz 103 yazdığımızda 3 renkten 2'si mavi ve sarı oluyormuş. Peki bunu sayıya baktığımız gibi daha kolay görmemizin bir yolu yok mu? Elbette ki var, hexadecimal sistem.

103 = $67

Hex düzende 67'ye eşit. Her bir basamak tek başına bir rengi ifade ediyor bak, 6 ve 7.

Başka bir örnek.

194 = $c2

C ve 2. C'nin 10'lu sayı sisteminde karşılığı 12'dir. Bu durumda 12 ve 2, yani gri ve kırmızı.

Bu açıklamalarım geriye bir soru işareti bırakıyor. Bu 3. renk nerde? İşte renk belleği (color memory) denilen ve $d800 (55296) adresinde yer alan bu alan 3. renk için. Peki her byte'a iki renk sığıyordu, renk belleğinde bu iş nasıl oluyor. Çok basit, alt 4 bit (sağdaki 4 bit) 3. rengi ifade ediyor, soldaki 4 bit ise bir işe yaramıyor, çöp. Bu durumda renk belleğine olduğu gibi renk kodunu yazmak yeterli. Yani yeşil renk istiyorsak doğrudan 5 yazabiliriz.

%AAAABBBB = $AB

A = Kullanım dışı
B = Renk değeri

Bu durumda 5 rengini vermek için 5'in 16'nın herhangi bir katıyla toplam değerini de versek sonuç değişmez. Kısacası.

$05,$15,$25,$35,$45...

Decimal (10'lu) sayı sistemindeki karşılıkları

5,21,37,53,69 v.s. olan tüm byte değerleri alt nibbleları 5'e eşit olduğu için 3. rengi yeşil yapacaklardır.

Ve bunların hepsi Plazma'da yazıyor, bu nedenle sana çok kızıyorum.

döngünün 8191'e kadar olmasında haklısın, 7999'a kadar olması yeterli. ben kafamdan $2000'lik bloğu dolduracak şekilde yazmışım o loop'u, çünkü son 192 byte'ın bitmap ekran ya da video/color ramler açısından bir espirisi yok, birşey yazsan da sorun çıkmaz. Amacımız sadece bitmap alanı doldurmaksa 0 to 7999 doğrusu olacaktır.

Son olarak peki hangi renk hangi adresten set ediliyor dersen;

00 = arkaplan rengi $d021 (53281) tüm ekran için ortak renk, tek adres
01 = 1. renk $0400-$07e7 (1024-2047) üst nibble (sol 4 bit) %XXXX----
10 = 2. renk $0400-$07e7 (1024-2047) alt nibble (sağ 4 bit) %----XXXX
11 = 3. renk $d800-$dbe7 (55296-56295) alt nibble (sağ 4 bit) %----XXXX

En sol üstteki karakterin renklerini tek tek ayrı satırlarda set eden program örneği:

Kod:
0 c0 = 0: c1 = 10: c2 = 7: c3 = 14
1 poke 53281,c0
2 poke 1024,(peek(1024) and 15) or (c1*16)
3 poke 1024,(peek(1024) and 240) or c2
4 poke 55296,c3

Buradaki peek ve or'ların sebebi bir rengi set ederken aynı bytedaki diğerini bozmamaktır. Gerçi her iki rengi de değiştireceksek kolayca iki satırı şu şekilde birleştirebiliriz.

Kod:
0 c0 = 0: c1 = 10: c2 = 7: c3 = 14
1 poke 53281,c0
2 poke 1024,c1*16+c2
4 poke 55296,c3

Çok fazla kavram bir arada geçmiş olduğu için tek seferde tüm anlattıklarımı anlamayabilirsin, normaldir. Daha önce ne kadar programcılık tecrüben olursa olsun Commodore 64'de birşeyler yapmaya gelince en çok kendini geliştirmen gereken taraflar bit tabanlı işlemler, binary ve hexadecimal sayı sistemleri (2'li, 16'lı) ve benzeri konulardır. Commodore'ûn kısıtlı hafızası "ya ne uğraştırıyorsun bit işlemleriyle, 3 renk için 3 tane memory alanı kullansan, hiç bizi uğraştırmasan olmaz mıydı?" demeye müsade etmediğinden bunları öğrenmek kritik bir hal alıyor. Ama şu faydası da var. Yarın öbürgün PC'de bir network paketi ya da multimedia dosya formatlarının headerlarını parse etmen gerekirse "bu ne lan böyle, ohaa çok zormuş" demez "aaa, tam benlik" dersin.

bkz: http://tools.ietf.org/html/rfc6184

Kod:
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |V=2|P|X|  CC   |M|     PT      |       sequence number         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           timestamp                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           synchronization source (SSRC) identifier            |
      +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
      |            contributing source (CSRC) identifiers             |
      |                             ....                              |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Herşey byte byte tutulmaz.
« Son Düzenleme: Aralık 22, 2012, 04:46:53 ÖÖ Gönderen: Skate » Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #78 : Aralık 22, 2012, 13:51:49 ÖS »

skata abi
plazma dergilerini de okuyorum ama soru cevap çeklinde olması daha anlaşılır oluyor
dergileriniz çok güzel kapak resimleri çok başarılı konularıda tam benim ilgi alanıma giriyor zaman zaman tum  yazıları okuyacağım

yukarıdaki bilgiler ışığında datalara verdiğimiz değerler piksellerin renkleri için nasıl bir rol oynuyor yada etkisi var mı
şimdi
4*8 piksellik hücrede
11101111
11111011
10101111
11110101
bu bitmap bellek haritasına yükleyince 0 olan yerler piksel off konumunda ve arka plan rengi alır on konumunda ise üç renkten birini mi alır sorun şu ki üç renkten hangisini alır

şimdi skate abi timanthes programı ile aldığım bmp resmi her hücreye 3 renk gelecek çekilde konvert etti değilmi ben burda en çok kullanılan rengi arka pilan rengi olarak atayabilirim mesela resimdeki siyah pikseller olduğu zaman data da o pikseli kapalı gösteririm ve arka plan olarak tanımladığım siyah rengi vermiş olurum
diyer üç renk  konusunu anlamadım

40 for i=0 to 1023
50 poke 1024+i,rnd(1)*256
60 poke 55296+i,rnd(1)*256
70 next i
bu kodları tam anlamadım  video memoriye 2 color memoriye 1 renk yerleştirdik datalarla on konumuna getirdiğim pikselin bu 3 renkten hangisini alacağını nasıl belirteceğim.





 

« Son Düzenleme: Aralık 22, 2012, 21:01:15 ÖS Gönderen: censez41 » Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #79 : Aralık 22, 2012, 14:07:01 ÖS »

skate abi  bana ust koseye yukarıdaki programla  renkli "a" yazdırabilirmisin ben onu inceleyerek sorularıma cevap bulabilirim plzz
Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #80 : Aralık 22, 2012, 20:49:48 ÖS »

http://trsceners.untergrund.net/computerscene/

bu link i farketmemişim tekneloji tv yi izlerdim sizide muhakkak görmüşümdür senel olarak ilgisizlik sizin programına değil teknoloji tv nin kendisineydi bence zaten kapandı gitti yazık oldu malesef son dönemlerinde ilgi çekmek için alakasız programlar yapmaya başlamışlar dı.
Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #81 : Aralık 23, 2012, 12:51:06 ÖS »

şuan iş yerinde konuyu tekrar inceledim ve sanırım anladim
00011011 data sı
hücrenin ilk satirina
arkapilan rengi-screen memory ilk 4 bit - screen memory sonraki 4bit-color memory son 4 bit

Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #82 : Aralık 23, 2012, 23:09:08 ÖS »

10 poke 53265,59
20 poke 53270,184
30 poke 53272,24
35 poke 53281,2
40 for i=0 to 1
50 poke 1024+i,rnd(1)*256
60 poke 55296+i,rnd(1)*256
70 next i
80 for i=0 to 9
85 read bak
90 poke 8192+i,bak
100 next i
110 data 63,207,243,252,63,207,243,252
 dataları çözdüm skate hocam arka plan rengi ile yatık çizgiler çizdim senin yüzünü kara çıkarmıycam artık dataları bulan bir vb programı yazabilirim.
Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #83 : Aralık 24, 2012, 00:12:32 ÖÖ »

skate abi timathes programıyla 160*200 çok renli modda nasıl çizdircez yaptığımız aynı şeyleri uyguluyorum ama bozuk çıkıyor biz seninle 320*200 ile yapmıştık ama 160*200 modda olması gerekmiyormu
Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #84 : Aralık 24, 2012, 20:22:59 ÖS »

bugun iki renk de olsa resmi visual basic le convert ettim ama şuan istediğim sonuçtan çok uzağım
Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #85 : Aralık 25, 2012, 23:26:25 ÖS »

<a href="http://www.youtube.com/v/OKTReUQX1Lc&rel=0" target="_blank">http://www.youtube.com/v/OKTReUQX1Lc&rel=0</a>
hocam nasıl konver ediyorum şimdilik arkabilam için bir renk diğer renler içinde baska bir renk olmak uzere iki renk tanımlatıyorum ama dataları emulatore koyunca fazla geliyor bir sure sonra bellek yetmiyor
Logged
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.794


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #86 : Mart 27, 2013, 11:43:43 ÖÖ »

Project One'ın 0.6'dan daha yeni versiyonu var mı? Veya benzer bir program. En son 3 sene önce güncellenmiş.
Logged

Sayfa: 1 ... 4 5 [6]   Yukarı git
Yazdır
Gitmek istediğiniz yer: