Forum: D Programlama Dili RSS
D ile işletim sistemi
Sayfa:  1  2  3  4  sonraki 
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: D ile işletim sistemi
Şöyle bir siteden haberim oldu:

  http://wiki.osdev.org/D_Bare_Bones

D ile yazılan ve örneğin grub ile yüklenebilen bomboş :) bir işletim sistemi gösteriyor.

Ben denemedim. :)

Ali
Avatar
huseyin #2
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ben denicem :)
Yanlız bu c ile yazılmaktan farksız olmuş
Huseyin
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bakalım D olanaklarından hangileri başarıyla kullanılabiliyor. Herhalde çöp toplayıcıya ve standart kütüphaneye ihtiyaç duyan olanaklar kullanılamayacaklar (-nostdlib -nodefaultlibs nedeniyle. Ayrıca gdc de şart herhalde çünkü dmd öyle seçenekler vermiyor (belki cfg dosyasındadır (?)).)

Ali
Avatar
huseyin #4
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ben de size bunu soracaktım gdc şart mı diye D nin olanakları geniş ben de c ile ilgili işletim sistemi kernel yazımı için kaynak kod ve doküman çok fazla D ye çevirmeye çalışsam başarılı olur muyum sizce ?
Huseyin
acehreli (Moderatör) #5
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
(Son mesajında cümle sonlarını doğru anlamamış olabilirim. :))

D ile boş bir işletim sistemi yazılabildiğine göre bir noktaya kadar da doldurulabiliyordur. Bizi bilgilendirirsin. :)

Ali
Avatar
huseyin #6
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
(Son mesajında cümle sonlarını doğru anlamamış olabilirim. :))
Yazı yazma konusunda kötüyüm bunu nasıl aşarım öneriniz var ise lütfen söyleyin

D ile boş bir işletim sistemi yazılabildiğine göre bir noktaya kadar da doldurulabiliyordur. Bizi bilgilendirirsin. :)

Umarım işe yarar bir sonuç çıkartırım bir hello world şart diye düşünüyorum bir print komutu vb . sizce ?
İlk olarak gdc yi yuklemem gerekli
Bir sorum olacak sizce kodları D ye özgü mü olsa daha iyi olur yoksa C ilintileri olsun mu
Huseyin
acehreli (Moderatör) #7
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
huseyin325325:
Yazı yazma konusunda kötüyüm bunu nasıl aşarım öneriniz var ise lütfen söyleyin

Olur mu öyle şey! :) Ben nokta olmadığı zaman okumaya devam ediyorum ve bir sonraki cümleye geçmiş olduğumu bazen geç anlıyorum. Noktalar benim gibiler için çok yararlı oluyor. :)

bir print komutu vb . sizce ?

O örnekte ekrana "D" yazdırıyorlar ama bunu doğrudan grafik kartının ekran bölgesine yazarak gerçekleştiriyorlar. Yani printf() filan bile olmadığına göre print() komutunu bile sen gerçekleştirmiş olursun. Zevkli olacağa benziyor. :)

kodları D ye özgü mü olsa daha iyi olur yoksa C ilintileri

Ben olsam öncelikle D'de bulunan olanakları kullanırdım. Yoksa tabii ki ilintilerden yararlanarak C kütüphane işlevleri çağrılabilir. Ama onların da ne düzeyde olduklarını hiç bilmiyorum. Bir işletim sistemi programcısına ihtiyacımız var ama Kutalmış son zamanlarda pek görünmedi.

Ali
Avatar
huseyin #8
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Daha önceden c ile işletim sistemi yazmaya çalıştım ama olumlu bir sonuc alamadım protected mode denilen kavram a kadar kolay gerisini bilmiyorum :)
Huseyin
Avatar
huseyin #9
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Hocam bu gdc insanı delirtir ya for( ; ;); kabul etmiyor sonsuz donguye nasıl sokucaz ?
Huseyin
Avatar
Salih Dinçer #10
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
while(1){
//...
}
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #11
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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
Avatar
huseyin #12
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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 ?
Huseyin
Avatar
huseyin #13
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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;
}
Huseyin
Bu mesaj huseyin tarafından değiştirildi; zaman: 2012-07-24, 09:35.
acehreli (Moderatör) #14
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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
Avatar
huseyin #15
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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 ?
Huseyin
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Sayfa:  1  2  3  4  sonraki 
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-19, 19:52:01 (UTC -08:00)