Ana Menü
· Ana Sayfa
· Dosyalar
· Dökümanlar
· Forum
· Günün Resmi
· Haber Arşivi
· WWW Linkleri
· Üye Listesi

     Forumlar

 strncpy ve strncpy_s
 Konu adi : Borland c++ Builder ile Amiral Batti
 Rady10 - YerliOyun
 Kabusta Kaybolmak
 Konsol da programı bekletmek
 Oyun programlama icin hangi programlama dilli ?
 flash! şanlıurfa bilgisayar oyununda(no rapid)
 Sevgilim Olur musun?
 Directx'e başlamak isteyenler bi bakın
 PSP programlama
 Flash tan php
 Bilgisyr oyunu yapmam için üniverstde hangi bölüme girmeliym
 www.arshiv.gen.ms
 Cimg.h ilgilenenler icin
 müttefik oyunu

Konu Disi
 Emraah
 Yeni sitemiz açıldı
 Kalp krizi durumunda ne yapılmalı?
 Oyun sektöründe hangi görevde çalışmak isterdiniz?
 Takım arkadaşı sorunu
 msn de renklı nıck
 pc hata veriyor ! YARDIM!!
 Gülmek isteyenler Buraya
 İnanılmaz hl 2 modu görüntüsü
 Computer Languages History

[ Forumlara Git ]


oyunyapimi.org: Forums

www.oyunyapimi.org :: Başlığı Görüntüle - Endian (Byte-Order) meselesi?
 SSSSSS   AramaArama   Kullanıcı GruplarıKullanıcı Grupları   ProfilProfil   LoginLogin 

Endian (Byte-Order) meselesi?

 
Yeni Başlık Gönder   Cevap Gönder    www.oyunyapimi.org Forum Ana Sayfası -> Programlama Dilleri ve Algoritmalar
Önceki başlık :: Sonraki başlık  
Yazar Mesaj
OsmanTuran



Kayıt: Apr 09, 2004
Mesajlar: 210
Nereden: Mersin - K.Maraş gel-git halinde

MesajTarih: Wed Jul 06, 2005 9:48 pm    Mesaj konusu: Endian (Byte-Order) meselesi? Alıntıyla Cevap Ver

Herkese merhaba,
Görüşmeyeli uzun zaman oldu sanırım. İş güç ben de ne cevap yazabiliyordum ne topic açıp kafamdaki soruları sorabiliyordum. Neyse 2005 yazının tarafımdan açılan ilk topic inde byte-order meselesiyle ilgili tuhaf bir soru soracağım siz değerli oy.org üyelerine Smile

Efendim, şimdi diyelim bir oyun motoru yaptık. Bi de virtual file system gömdük sisteme interface ler yardımıyla. Sonracığıma tam otomasyon olsun diye MOD programcıları big-endian mı, yoksa little endian mı processor (PowerPC veya x86) bakılmaksızın ReadInt32, ReadInt16 gibi dosya sistemi fonksiyonları tanımladık VFS de. Lakin yaptığım araştırmalarda gözüme birşey takıldı. Var olan iki yöntem var (!) dosyadan hangi sistemde olunursa olunsun little byte order olarak okuma yapan:

1-Quake2 kodundaki gibi program açılışta bir swap testi yapar. Program buna göre swap kodlarının procedure/fonksiyon adreslerini set eder. Sonra sistem hiç birşey yokmuş gibi çalışıyor.
2-Programlayan adamların "Portable C++ blabla" dedikleri programlar hiç test yapmadan direk byte byte okutup bit-shifting lerle integer, word gibi ifadeler elde etme.

Örneğin:
function ReadInt32(Stream: TStream): Integer;
var buf: array[0..3] of Byte;
begin
Stream.ReadBuffer(buf[0], 4);
Result := buf[0] or (buf[1] shl Cool or (buf[2] shl 16) or (buf[3] shl 24);
end;

Mesela, ben böyle bir fonksiyondan yanayım VFS içerisinde. Ama diğer koşullarda 1. yöntemi de kullanmayı düşünüyorum.

Şimdi ikinci yöntemle ilgili sizden iyi olmasin (www.glscene.org) forumuna bi topic actim adamlar kisaca böyle bişey olmaz diyor (Ivan efendi). Sizin yorumunuz nedir? İlla birinci seçenek olan Carmack amcadan kalma yöntemler mi uygulayalım? Ne dersiniz?
PS: Biraz uzun mu oldu ne? Very Happy
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et MSN Messenger
OsmanTuran



Kayıt: Apr 09, 2004
Mesajlar: 210
Nereden: Mersin - K.Maraş gel-git halinde

MesajTarih: Wed Jul 06, 2005 9:51 pm    Mesaj konusu: Alıntıyla Cevap Ver

Çok özür diliyorum. Şu winkler nerden çıktı yaw Razz Şöyle olacak o satır

Result := buf[0] or (buf[1] shl 8 ) or (buf[2] shl 16) or (buf[3] shl 24);
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et MSN Messenger
HakanNehir



Kayıt: Mar 22, 2004
Mesajlar: 60

MesajTarih: Wed Jul 06, 2005 10:18 pm    Mesaj konusu: Alıntıyla Cevap Ver

Delphiyle mi kullanacaksın bilmiyorum ama ben olsam birinciyi seçerdim.
Neden dersen hem daha hızlı hemde debug etmesi daha kolay.

Ama ikincisi de çalışır bir problem yok.
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder Kullanıcının web sitesini ziyaret et
lucifer



Kayıt: Nov 02, 2002
Mesajlar: 215
Nereden: Istanbool

MesajTarih: Thu Jul 07, 2005 8:12 am    Mesaj konusu: Alıntıyla Cevap Ver

>Program buna göre swap kodlarının procedure/fonksiyon
>adreslerini set eder.

Ben bu yonteme cok alistim, bizim gibi 50mhz'lik islemciyle 100,000 user desteklemeye kalktigin durumlarda optimal kod hayli onemli oluyor, bir cok yerde 'if' checklerini elimine etmek icin procedure pointerleri kullaniyoruz. ama zaten stream.ReadBuffer() cok zaman alacagi icin altindaki o check'in yedigi zaman ignore edilebilir.

bi de, o yazdigin procedure'nin mac'de duzgun calisacagina emin misin? sanki mac'de o result := satiri buf[3] or (buf[2] shl 8) ... gibi olacakti.... bir dusuneyim.... dusunemiyorum cok uykum var.

iyiki dondun osmanturaaaan, iyikidondun osmanturraaaann
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et
KePhReNZ



Kayıt: Jan 02, 2003
Mesajlar: 55
Nereden: İzmir

MesajTarih: Thu Jul 07, 2005 8:15 am    Mesaj konusu: Alıntıyla Cevap Ver

Yanlış anlamadıysam her zaman LITTLE_ENDIAN okutmak istiyorsun ...

Bence iki tane header yapıp birisini BIG_ENDIAN sa , diğerini LITTLE_ENDIAN sa include etmek daha doğru olur , en azından ben böyle yapardım, hiç kullanmayacağım bir kodu niye hafızaya yükleyim 1, ikincisi (gerçi powerpc lerde war) little endian/big endian arasında switch yapmam gerekmeyecek.

Yani

#ifdef LITTLE_ENDIAN
okuFonk()
{
..........
}
#endif

#ifdef BIG_ENDIAN
okuFonk()
{
........
}
#endif
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder
OsmanTuran



Kayıt: Apr 09, 2004
Mesajlar: 210
Nereden: Mersin - K.Maraş gel-git halinde

MesajTarih: Sat Jul 09, 2005 8:35 pm    Mesaj konusu: Alıntıyla Cevap Ver

valla gec de olsa mesaj yazayim.

@lucifer: yaw iste ben de ondan emin degilim. O Result'in oldugu satir bana yanlis gibi geliyor. Ama hangi "portable c blabla" programina baksam little endian okutmak icin boyle yapiyor. Ayrica o kucuk delphi kodunu sadece file system de kullanmayi dusunuyorum. Diger yerlerde variable procedure kullanacagim. Aslinda delphi optimizasyonuna baktigimizda (eminim diger compiler larda da oyledir) variable bir procedure un cagrilmasinda bi suru push-pop lar beliriyor normal static procedure e oranla. Cogu zaman bir test yada cmp komutu (yani high-level deki if komutlari) daha hizli sonuclar veriyor.

Bu arada hosbulduk uğur bey Very Happy
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et MSN Messenger
leblebi



Kayıt: Jan 05, 2004
Mesajlar: 127
Nereden: q3dm17

MesajTarih: Mon Jul 11, 2005 6:10 pm    Mesaj konusu: ... Alıntıyla Cevap Ver

Bu isi network codeunda da kullanman gerekecegi icin(non-real time file access icin performans o kadar onemli olmasa da network icin onemli olacaktir, tabii profile edip gormek lazim) on-the-fly swap yerine function pointer ya da call overhead derdin varsa KePhReNZin dedigi gibi kullanmak daha akilci bana gore.
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder Kullanıcının web sitesini ziyaret et
Mesajları göster:   
Yeni Başlık Gönder   Cevap Gönder    www.oyunyapimi.org Forum Ana Sayfası -> Programlama Dilleri ve Algoritmalar Tüm saatler GMT +2 Saat
1. sayfa (Toplam 1 sayfa)

 
Forum Seçin:  
Bu forumda yeni konular açamazsınız
Bu forumdaki mesajlara cevap veremezsiniz
Bu forumdaki mesajlarınızı değiştiremezsiniz
Bu forumdaki mesajlarınızı silemezsiniz
Bu forumdaki anketlerde oy kullanamazsınız


Powered by phpBB 2.x.x © 200x phpBB Group
Türkçe Çeviri : Onur Turgay & Erdem Çorapçıoğlu
Türkçe Düzenleme: Alexis Canver
Version 2.x.x of PHP-Nuke Port by Tom Nitzschner © 200x www.toms-home.com




Web site powered by PHP-Nuke
Web site engine\'s code is Copyright © 2002 by PHP-Nuke. All Rights Reserved. PHP-Nuke is Free Software released under the GNU/GPL license.
Sayfa Üretimi: 0.209 Saniye