July 24, 2012

Gdc de şuanda problem yok gibi görünüyor ama ilerde belli olur .)
Bu arada niye unsigned char ın D de karşılığı yok uchar gibi yoksa var da ben mi kullanamadım ?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 23, 2012

Bu arada, bu konu için ne kadar önemli olduğunu bilmiyorum ama gdc var, gdc var. :) Yanılmıyorsam dmd 2.059 ile uyumlu olan gdc henüz gcc'nin ana kolunda mevcut değil.

Modern gdc sanırım şu:

https://bitbucket.org/goshawk/gdc/wiki/Home

Daha kolayca bulunan gdc galiba ta D1 zamanlarından kalma. Ama dediğim gibi, kernel için hiç önemi olmayabilir.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 24, 2012

Tamam tek sorunum şuan bu kaldı ama bunu nasıl çözebilirim

main.d:33: Error: cannot implicitly convert expression ("Hello, world!") of type string to char*

Acaba bunu değişke olarak alsam da sonra değişkeni oraya versem çözülür mü ?

Ayrıca bir sorum daha olacak volatile tam olarak ne oluyor ben C de bu tür kernelleri çok basit yöntemlerle yazabiliyorum ama D de bunu anlayamadım örneğin bir putc : C de şuna benzer bir sistem de yazılabiliyor

int x, y; // x y koordinat
char color; //renk
void putc( unsigned char c )
{
 char *vidmem = (char*)0xB8000; // bu da vidmem adresi benim bildiğim
 int pos = ( y * 2 ) + x; //pozisyonu al
 vidmem[pos]   = c; //karkteri yaz
 vidmem[pos++] = color; //renk belirleme
 if (c == '\n') // yenisatır
 {
   y++;
   x = 0;
 }
 else
   x += 2;
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 24, 2012

Gdc bana 'synchronized' kullan dedi kullanınca da kabul etmedi :( ama 'shared' denemedim umrım işre yarar.
std.string.tostringz dediğiniz bir kütüphaneye girmiyor mu nasıl kullanabilirim ki ?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 24, 2012

Bu da puts olsun ama ben bunları D de kullanabilir miyim bilemiyorum

int puts( char *mesaj )
{
 int uzunluk;
 while(*mesaj)
 {
   putc(*mesaj++);
   uzunluk++;
 }
 return uzunluk;
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 24, 2012

Çok soru soruyorum galiba ama bir soru daha kendimce birşeyler uydurdum ama hata alıyorum sebebi nedir

/home/huseyin325325/Projeler/os/main.d:1: undefined reference to _Dmodule_ref' /home/huseyin325325/Projeler/os/main.d:1: undefined reference to _Dmodule_ref'

Ben size kodu gönderim yada buraya yazım siz biraz düzenleyin ben beceremedim :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 24, 2012

Yo ben onların kodu ile ilgilenmiyorum kendim yazdım ama onlara benzetmeye çalıştım D ye uysun diye

int x, y;
char renk;
void putc( char c )
{
 char *vidmem = cast(char*)0xB8000;
 int pos = ( y * 2 ) + x;
 vidmem[pos]   = c;
 vidmem[pos++] = renk;
 if (c == '\n')
 {
   y++;
   x = 0;
 }
 else
   x += 2;
}

extern(C)void main(uint magic, uint addr)  // BUrayı bir hatayı çözmek için düzelltim
{
 putc('D');
 for(;;){
	  //....
	  }
}

Alıntı:

>

Bildiğim kadarına bakarım ama kernel'i bu tarafta yazıp deneyemem. :(

Hmm anladım derleniyor ama ref hatası var linkerden geçince

Bunu Andrei hocaya sorabiliriz aslında

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 24, 2012

Oh oh! Heyecanlı görünüyor! :)

  • uchar yerine ubyte

  • string'den C dizgisi elde etmek için std.string.toStringz:

   strlen(s.toStringz());  // Dikkat: C işlevine verilen char* değeri,
                           // 's' D tarafında sonlandığında geçersizdir!

Yani eğer C işlevi o göstergeyi bir şekilde saklı tutacaksa bizim de 's'yi yaşatmamız gerekir.

  • volatile, derleyiciye "sen bu değişkenin değerinin kesinlikle değişmeyeceğinden emin olarak onun değerini bir işlemci yazmacında saklayabilirsin; öyle yapma, çünkü o değişkenin değeri senin bilgin dışında değişebilir; değerini her zaman için bellekteki adresinden oku" demektir.

D'de onun yerine sanırım 'shared' veya 'synchronized' anahtar sözcüklerinden yararlanılabilir. Örneğin değişkeni 'shared' yapmak C'deki volatile'ın karşılığı olabilir ama emin değilim. :/

  • İki satır değiştirince hiç olmazsa D'de derlendi:
void putc(char c )
{
 char *vidmem = cast(char*)0xB8000; // bu da vidmem adresi benim bildiğim

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 24, 2012

Hocam bilmem dikkatinizi çektimi biraz araştırma yapayım ddim bunu buldum

http://www.dsource.org/projects/osian/

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 24, 2012

Alıntı (huseyin325325):

>

std.string.tostringz dediğiniz bir kütüphaneye girmiyor mu nasıl kullanabilirim ki ?

Ha ha! Doğru! :D

Yapılması gereken şu: string'in içindeki bütün karakterleri bir bölgeye kopyala ve en sonuna da '\0' karakterini yerleştir. O bölgenin adresini de C işlevine gönder.

Her dizinin .ptr niteliği ilk elemanın adresi olduğu için bu iş D'de çok kolay:

   strlen((s ~ '\0').ptr);

Aklıma geldi: Aslında bunu "merhaba" gibi hazır değerler için yapmana gerek yok; onların sonunda zaten sonlandırma karakteri var.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]