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 2 [3] 4 5 6   Aşağı git
Yazdır
Gönderen Konu: c64 resim yapma  (Okunma Sayısı 63160 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #30 : Aralık 13, 2012, 15:23:56 ÖS »

31 poke 56334,peek(56334)and254

arkadaşlar burdaki işlemin anlamı nedir benim bildiğim peek komutu ilgili adresin içeriğine hangi değerin olduğunu bize verir burda and254 ifadesi ne anlama geliyor ve poke 56334 hucresine hangi değeri veriyor.
Logged
witchdoktor
Uzman
*****
Mesaj Sayısı: 6.238



Üyelik Bilgileri
« Yanıtla #31 : Aralık 13, 2012, 17:37:56 ÖS »

31 poke 56334,peek(56334)and254

arkadaşlar burdaki işlemin anlamı nedir benim bildiğim peek komutu ilgili adresin içeriğine hangi değerin olduğunu bize verir burda and254 ifadesi ne anlama geliyor ve poke 56334 hucresine hangi değeri veriyor.

Kod:
31 POKE 56334, PEEK(56334) AND 254

CIA-1 çipindeki interrupt zamanlayıcısı olan TIMER A kontrol yazmacı olan $DC0E (56334) adresinde 0. biti sıfırlıyor ve interrupt'ları kapatıyoruz. İlgili yazmacın içeriğini PEEK ile okuyup ikili sistemde %11111110 (onlu sistemde 254) ile AND mantıksal işlemine tabi tutarak bit 1-7 değerine dokunmadan gerçekleştiriyoruz bu işlemi.

Çünkü bu programda karakter ROM'unu okumak için I/O bölgesini aşağıdaki satırla kapattığımızda (ki $D000-$DFFF yani 53248-57343 arasında kalan 4K'lık bölgede C64'de hem RAM, hem karakter ROM, hem de I/O bölgesi yer almaktadır) interrupt'lar nedeniyle sistem kilitlenecektir.

Kod:
32 POKE 1, PEEK(1) AND 251

Aradaki satırlarda (35-38) ilk 64 karakterin ROM imajları 12288'den itibaren RAM'e kopyalanıyor.

Aşağıdaki satırla I/O bölgesi tekrar görünür hale getiriliyor.

Kod:
39 POKE 1, PEEK(1) OR 4

Devamında ise TIMER A kontrol yazmacı olan 56334 adresindeki 0. biti 'set' ederek (1 yaparak) interrupt'ları tekrar aktive ediyoruz. Bunu yapmak için ilgili yazmacın içeriğini PEEK ile okuyup ikili sistemde %00000001 (onlu sistemde 1) ile OR mantıksal işlemine tabi tutarak bit 1-7 içeriğine dokunmamış oluyoruz.

Kod:
POKE 56334, PEEK(56334) OR 1

İkili sistemi, mantıksal işlemleri (AND, OR, NOT, XOR) dokümanlarda okursan bu konuları daha rahat anlayabilirsin. Daha önceki mesajlarda anlatmak istediğim de buydu.
Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #32 : Aralık 13, 2012, 17:48:52 ÖS »

Lojik devre tasarım dersinde bunları gördük ama isin ısinden çıkamamıştım bu alanda kendimi geliştirmek istesem sıfırdan başlayıp bütün detayları öğrenmek isterim ama ben istediğim resmi bir cizdirebilsem bu sayfayı kapatmayı düşünüyorum

Sorum bu komutlar sanırım kalıp seklinde

31 POKE 56334, PEEK(56334) AND 254
Hep incelediğim programlarda  56334 hücresi hep 254 ile and lanmiş bende  bu sekilde yazarım

Benim bulman gereken ekran bellek haritası ve renk bellek haritası hakkında bilgi ama verilen turkçe kaynaklar assampli uzerinden anlatılmış

http://bardstale.brotherhood.de/talefiles/board/viewtopic.php?p=2504&sid=fba81c407c5494d15bbe63a09e4167a4

bu sitede işime çok yarıyacak bilgiler var ama ingilizce google translate ile anlamaya çalışıyorum
« Son Düzenleme: Aralık 13, 2012, 18:01:16 ÖS Gönderen: censez41 » Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #33 : Aralık 13, 2012, 18:11:12 ÖS »

10 rem * example 2 *
  20 rem creating multi color programmable characters
  31 poke 56334,peek(56334)and254:poke1,peek(1)and251
  35 fori=0to63:rem character range to be copied from rom
  36 forj=0to7:rem copy all 8 bytes per character
  37 poke 12288+i*8+j,peek(53248+i*8+j):rem copy a byte
  38 next j,i:rem goto next byte or character
  39 poke 1,peek(1)or4:poke 56334,peek(56334)or1:rem turn on i/o and kb
  40 poke 53272,(peek(53272)and240)+12:rem set char pointer to mem. 12288
  50 poke 53270,peek(53270)or16
  51 poke 53281,0:rem set background color #0 to black
  52 poke 53282,2:rem set background color #1 to red
  53 poke 53283,7:rem set background color #2 to yellow
  60 for char=60to63:rem program characters 60 thru 63
  80 for byte=0to7:rem do all 8 bytes of a character
  100 read number:rem read 1/8th of the character data
  120 poke 12288+(8*char)+byte,number:rem store the data in memory
  140 next byte,char
  150 print"{clear}"tab(255)chr$(60)chr$(61)tab(55)chr$(62)chr$(63)
  160 rem line 150 puts the newly defined characters on the screen
  170 get a$:rem wait for user to press a key
  180 if a$=""then170:rem if no keys were pressed, try again
  190 poke53272,21:poke53270,peek(53270)and239:rem return to normal chars
  200 data129,37,21,29,93,85,85,85: rem data for character 60
  210 data66,72,84,116,117,85,85,85: rem data for character 61
  220 data87,87,85,21,8,8,40,0: rem data for character 62
  230 data213,213,85,84,32,32,40,0: rem data for character 63
  240 end
benim aradığım program bu..... burda olanları bana kim satır satır açıklıyabilir
sanırım datalara vereceyim değerlerle kendi resmimi yapabilirim
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #34 : Aralık 13, 2012, 21:51:14 ÖS »

Kod:
31 poke 56334,peek(56334)and254:poke1,peek(1)and251

bu satır $dc0e adresinin değerini $fe (%11111110) ile andleyerek en alt bitini sıfırlatyıp CIA 1 timerını durduruyor. sonra $01 adresini $fb (%11111011) ile andleyerek $d000 alanında ROM karakter setini aktif ediyor.

Kod:
35 fori=0to63:rem character range to be copied from rom
36 forj=0to7:rem copy all 8 bytes per character
37 poke 12288+i*8+j,peek(53248+i*8+j):rem copy a byte
38 next j,i:rem goto next byte or character

Bu bölüm $d000'daki ROM karakter setini $3000'e kopyalıyor. Kısacası ROM'daki C64'ün default karakter setini RAM'a aktarmış oluyoruz.

Kod:
39 poke 1,peek(1)or4:poke 56334,peek(56334)or1:rem turn on i/o and kb

Burada $01'in değerini eski değerine getiriyoruz, yani $d000 alanı artık I/O bölgesi olarak kullanılabilir durumda. CIA1 timerı da yeniden aktif.

Kod:
40 poke 53272,(peek(53272)and240)+12:rem set char pointer to mem. 12288

$d018 adresini kullanarak karakter seti pointerını $3000'e alıyoruz. Artık görüntülenen karakterler $3000'deki karakter seti. $3000'deki dataları değiştirerek istediğimiz karakterleri elde edebiliriz.

Kod:
50 poke 53270,peek(53270)or16

$d016 ile multicolor mode'u aktif ediyoruz.

Kod:
51 poke 53281,0:rem set background color #0 to black
52 poke 53282,2:rem set background color #1 to red
53 poke 53283,7:rem set background color #2 to yellow

$d021 ile iç ekran rengini siyah'a çeviriyoruz.
$d022 ve $d023 multicolor mode'da karakterlerin 2. ve 3. renklerini ifade ediyor. Bunları da kırmızı ve sarı yapıyoruz.

Kod:
60 for char=60to63:rem program characters 60 thru 63
80 for byte=0to7:rem do all 8 bytes of a character
100 read number:rem read 1/8th of the character data
120 poke 12288+(8*char)+byte,number:rem store the data in memory
140 next byte,char

bu bölüm "data" satırlarını okuyup $3000'deki karakter setinde istenilen bölgelere (60, 61, 62 ve 63. karakterler) taşıyan, diğer bir deyişle bazı karakterleri değiştiren bölüm.

Kod:
150 print"{clear}"tab(255)chr$(60)chr$(61)tab(55)chr$(62)chr$(63)

Bu satır datalarını değiştirdiğimiz karakterleri ekrana basan bölüm. Artık karakterlerin ROM karakter setindeki karşılıklarını değil, data satırlarından okunmuş bitmap değerlerini görüyoruz.

Kod:
170 get a$:rem wait for user to press a key
180 if a$=""then170:rem if no keys were pressed, try again
190 poke53272,21:poke53270,peek(53270)and239:rem return to normal chars

bir tuşa basılana kadar bekle, basıldıysa orjinal karakter setine dön ve multicolor modunu kapat.

Kod:
200 data129,37,21,29,93,85,85,85: rem data for character 60
210 data66,72,84,116,117,85,85,85: rem data for character 61
220 data87,87,85,21,8,8,40,0: rem data for character 62
230 data213,213,85,84,32,32,40,0: rem data for character 63
240 end

Her biri 8'er bytedan oluşan 4 karakterin değeri. Bu karakterlerin neye benzediğini görmek için 2'li (binary) sistemdeki değerlerini alt alta dizmek yeteri. Örnek:

Kod:
129= %10000001
37 = %00100101
21 = %00010101
29 = %00011101
93 = %01011101
85 = %01010101
85 = %01010101
85 = %01010101

Bu 60 numaralı karakterin ekranda nasıl görüneceği. Ancak multicolor modeda bunu yatayda yarı çözünürlükte (her karakter satırında 4 geniş pixel) ve renkli olarak düşünmek lazım. Bitleri tek tek değil, ikili gruplar halinde değerlendirmemiz gerekiyor. Şöyle ki;

%00 = A rengi ($d021 ile belirlenen arkaplan rengi)
%01 = B rengi ($d022 ile belirlenen birinci multicolor rengi)
%10 = C rengi ($d023 ile belirlenen ikinci multicolor rengi)
%11 = D rengi ($d800'den itibaren yer alan color memory ile belirlenen ve ilk 8 renk ile sınırlı olan üçüncü renk)

diye varsayarsak;

Kod:
129= %10000001 = BBAAAACC
37 = %00100101 = AABBCCCC
21 = %00010101 = AACCCCCC
29 = %00011101 = AACCDDCC
93 = %01011101 = CCCCDDCC
85 = %01010101 = CCCCCCCC
85 = %01010101 = CCCCCCCC
85 = %01010101 = CCCCCCCC

Bazı bölümlerde "CIA1 timer'ı nedir? $d018 nasıl karakter ekranını $3000'e aldı?" gibi soruişaretlerin olacağının farkındayım ancak sana daha önce tavsiye ettiğim şeyi yapıp Plazma'daki yazı dizilerini okursan, bunların hepsi orada açıklanıyor (sanırım CIA timerları hariç).
« Son Düzenleme: Aralık 13, 2012, 21:54:52 ÖS Gönderen: Skate » Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #35 : Aralık 13, 2012, 22:52:28 ÖS »

skate bey ilgilendiğiniz icin tesekkurler  meskul oldugunuzun farkindayim ama tam ekran olarak ekrana resim çizmek icin üzerinde çalısmam gereken program bumu
Logged
witchdoktor
Uzman
*****
Mesaj Sayısı: 6.238



Üyelik Bilgileri
« Yanıtla #36 : Aralık 13, 2012, 22:59:06 ÖS »

skate bey ilgilendiğiniz icin tesekkurler  meskul oldugunuzun farkindayim ama tam ekran olarak ekrana resim çizmek icin üzerinde çalısmam gereken program bumu

Programla ne tür bir şeyler çizmek istiyorsunuz? Merak ettim de.
Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #37 : Aralık 13, 2012, 23:02:29 ÖS »

bir fotoğraf var onu bilgisayarda çizdircem

şimdi mantık 255 ascii karekterlerin herbiri karekter seti ve biz yukardaki programla kendi karekter setimizi yapıyoruz mesela ben ascii karekterilerin den olan "c" harfini oluşturan pikselleri rengarenk yapıp orjinal "c" nin yerine koyabilirim doğru anlamışmıyım sonra oluşturduğum bu karekter setlerini ekrana dizmek suretiyle bir  resim meydana getirebilirim mantık bunu?


« Son Düzenleme: Aralık 13, 2012, 23:06:48 ÖS Gönderen: censez41 » Logged
witchdoktor
Uzman
*****
Mesaj Sayısı: 6.238



Üyelik Bilgileri
« Yanıtla #38 : Aralık 13, 2012, 23:15:40 ÖS »

bir fotoğraf var onu bilgisayarda çizdircem

şimdi mantık 255 ascii karekterlerin herbiri karekter seti ve biz yukardaki programla kendi karekter setimizi yapıyoruz mesela ben ascii karekterilerin den olan "c" harfini oluşturan pikselleri rengarenk yapıp orjinal "c" nin yerine koyabilirim doğru anlamışmıyım sonra oluşturduğum bu karekter setlerini ekrana dizmek suretiyle bir  resim meydana getirebilirim mantık bunu?


Hiçbir programcı, fonksiyonel ve prosedürel çizimler dışında bu tarz grafikleri program içinde tasarlamıyor. Kendi hazırladığı veya piyasada bulunan editörler ile grafikler bitmap veya karakter (tile) tabanlı olarak hazırlanıp daha sonra ana programa ya doğrudan entegre ediliyor veya depolama aygıtından yükleniyor. Yani tasarım programın içinden yapılmıyor.

Windows üzerinden çalışan çeşitli yardımcı programlar da mevcut.

http://www.coder.myby.co.uk/charpad.htm

http://noname.c64.org/csdb/release/?id=75871

http://p1.untergrund.net/

http://www.anigators.com/projekte/7up/
« Son Düzenleme: Aralık 13, 2012, 23:21:38 ÖS Gönderen: witchdoktor » Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #39 : Aralık 13, 2012, 23:24:01 ÖS »

dediğini anlıyorum ama elimde imkanlar yok sadece teyp var tam ekran olmasada yarım ekran bişey çizdireyim zaten bir kereye mahsuz yapacağım
mantık olarak yukarıdaki gibimi olaya yaklaşmam gerekiyor.
mesela bende bir eğitim kaseti vardı belki sizde kullanmışsınızdır baya geometri sorularında çizimler yapıyordu ve puan verdiği ekranda yanlış hatırlamıyorsan üsküdara giderken çalıyordu  o kasetteki harfler yukardaki gibi bir programla italik olarak yapılmıştı sanırım
Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #40 : Aralık 13, 2012, 23:27:55 ÖS »

verdiğin programlar işime yarıyacak istediğim resmi 160x200 çözünürlüğünde 16 renk olarak convert etmem için gerekiyor sonra bu piksel değerlerini tektek elle datalara gireceğim
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #41 : Aralık 13, 2012, 23:28:06 ÖS »

bu karakter seti üzerine çizim yapmak için. eğer aynı karakteri tekrar tekrar kullanarak birşey çizmeyeceksen, tam ekran serbest çizim yapmak istiyorsan bitmap modu kullanman lazım. çok basit biçimde;

Kod:
poke 53265,59
poke 53272,24

bu iki komut ile;

$0400: video ram
$2000: bitmap
$d800: color ram

olacak şekilde ekran açmış olursun. eğer tek renk çalışmak istiyorsan zaten bilgisayar açılıştan bu modda geleceği için ek bir poke yapmana gerek yok. bu durumda 320x200 çözünürlükte tek renk çalışabilirsin. her 8x8'lik karakter alanının arkaplan ve çizim renkleri $0400'deki ekran adresinden değiştirilebilir. yani tek renk dediğimiz mod da aslında her bir karakter alanı içinde arkaplan ve çizim rengi olmak üzere 2 farklı renk şeklinde gerçekleşiyor.

Kod:
poke 53270,184

bunu kullanarak çok renkli moda geçersin. bu durumda arkaplan rengi her karakter için ayrı olmaz, $d021'in değeri tüm ekran için arkaplan rengine dönüşür. $0400 her karakter için 3 renkten birine işaret eder. $d800'deki renk ekranı ise bu durumda devreye girer ve kalan 2 rengi belirler.

bu açıklamaları yaptıktan sonra sana (vaktim olmadığı için) çok basit bir tek renk bitmap örneği.

Kod:
10 poke 53265,59
20 poke 53272,24
30 cb=11:rem arkaplan koyu gri
40 cf=1 :rem cizim rengi beyaz
50 c=cf*16+cb
60 for i=0 to 1023
70 poke 1024+i,c:rem $0400 alanini ayni renklerle doldur
80 next i
90 for i=0 to 8191
100 poke 8192+i,i and 255
110 next i


Bu tüm karakterlerin arkaplanını koyu gri, çizim rengini beyaz ile doludurur ve bitmap alanını artan değerlerdeki (saçmasapan) bytelarla doldurur. Bundan fazlasını anlayabilmen, birşeyler yapabilmen için soru sorman değil döküman okuman gerekiyor. Daha önce makale halinde yazdığımız şeyleri tekrar tekrar anlattırıyorsun çünkü bize.

http://www.plazma-dergi.org/
Logged
censez41
Üye
***
Mesaj Sayısı: 50


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

Skate abi dökümanlarını seve seve okurum ancak konuları assamli üzerinden anlatılırsa pek anlamam gibi geliyor ama biraz bişeyler anlayınca heveslendim senin dökümanları okuyacağım

şimdi ben 160x200 çözünürlüğünde 16 renk olarak bişey çizmeye çalışcağım

http://www.lemon64.com/forum/viewtopic.php?t=34083&postdays=0&postorder=asc&start=0
burdaki arkadaş tamda benim isteğim şeyi yazıyor hatta bu foruma uye olup kendisine çatpat ingilizcemle sormaya çalıştım ama cevap gelmedi

1 POKE 53265,PEEK(53265) OR 32
2 POKE 53272,PEEK(53272) OR 8
3 POKE 56576,PEEK(56576) AND 252
10 FOR N = 0 TO 999
11 READ C
12 POKE N+49152+1024, C
13 NEXT N
20 FOR N = 0 TO 7999
21 READ L
22 POKE N+49152+8192, L
23 NEXT N
100 GOTO 100

bu kodlar ile yapmayı başarmış ama dataları tabii çok olduğu için yazmamış
senin verdiğin orneği 160x200 çözünürlüğünde 16 renk modunda olacak sekilde değiştirirmisin
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #43 : Aralık 13, 2012, 23:56:25 ÖS »

Kod:
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

herşeyi random'a çevirdim. 16 renk ekran açıyor. tüm video ram, color ram ve bitmap alanını random değerlerle dolduruyor. sen "rnd(1)*256" olan yerleri kendi istediğin değerleri dolduracak şekilde değiştirmelisin. nasıl yapacağını bilmiyorsun ve işte o nasıl yapacağın konusu plazma'da yazıyor.
Logged
censez41
Üye
***
Mesaj Sayısı: 50


Üyelik Bilgileri
« Yanıtla #44 : Aralık 14, 2012, 00:00:40 ÖÖ »

tamam aradığım program bukadarcık bundan sonrasını hallederim çok teşşekkür ederim artık dergilerinizi okuyup için mantığını öğrenmeye çalışacağim. iyi akşamlar
Logged
Sayfa: 1 2 [3] 4 5 6   Yukarı git
Yazdır
Gitmek istediğiniz yer: