skate: saol kardesim. Anatolian Governor'dan once cikaricam sanirim Cepp'i. Zaten su an Cepp'ten de Anatolian Governor'dan yuksek oncelikli baska projeler var
vigo: saol abicim gururla giydim tabii ki NS tisortumu. Zaten sIk sIk MS'e de giyiyorum. Belki bi gorup merak eden soran olur diye
scg: selam scg. sorulari sirayla yanitlamaya calisayim
C++'tan destekledigim seyler
- switch/case haric butun keywordler
- classlar, public/private attribute ve metodlar, constructor ve destructorlar
- pointerlar ve heap objeleri. tek bir primitive type var o da cByte. cByte disindaki objelerin hicbiri stackde local yaratilamiyor. hep newlenip deletelenmeleri lazim
- overloaded metodlar
desteklemediklerim:
- recursion (c64 stack cok kucuk cunku)
- operator overloading
- templates
- inheritance (bunun eksikligini hissediyorum ama cok yavaslatmadan eklemenin bir yolunu bulmam lazim)
limitler:
- metodlara gecirilen arguman sayisi maksimum 2 olabilir. daha cok arguman gecirilmesi gereken durumlarda o argumanlardan bir class olusturmak ve o classtan bir obje gecirmek gerekiyor.
C= spesifik ozel eklentiler:
- her class icin obje pool size tanimlama: Cepp teki temel dizayn kararlarindan biri pointer'lari 1 bayt yapmak ve her class'in dinamik yonetimi icin bir pool kullanmak idi. Yani pointerlar pooldan dondurulen objenin pool icindeki indexi oluyorlar. bu pool size o objeden bir anda kac tane olabilecegini gosteriyor. eger bu ebadi asacak kadar new yapip delete yapmazsaniz, new null dondurmeye basliyor. bu limit default olarak 31 ama 255'e kadar herhangi bir sayiya set edilebilir. bunun icin _CEPP_CLASS_MAX( n ) macrosu eklendi:
class cSoldier _CEPP_CLASS_MAX( 127 )
{
public:
...
};
- Bir diger onemli ekleme singleton patterni. Bu pattern sadece bir instance yaratilacak olan classlari ozel olarak singleton olarak tanimlamanizi sagliyor. Boylece o classlarin metod ve attributelerine ulasirken compiler daha optimize kod uretebiliyor. cunku bu objeler compile time' da bellekte sabit bir yere yerlestiriliyor. Bir classi singleton yapmak icin adinin 's' ile baslamasi yeterli. 'sIsim' diye bir singleton tanimlandiktan sonra kodda o singleton objeye erismek icin 'TheIsim' demek yeterli
- _CEPP_PLACE_AT( address ) macrosu. bu macro ile bir singleton'in bir attribute'u bellekte istenen bir adrese yuklenebiliyor. Bu sayede memmory mapped IO cihazlarinin registerlerini bir singleton'in attributeleri yapmak mumkun.
class sAvideo {
public:
cByte mInit();
cByte mSetBorderColor(cByte i_bColor);
cByte mSetScreenColors(cByte i_bBorderColor, cByte i_bBackgroundColor);
cByte mGetBorderColor();
cByte mIsInitialized();
private:
cByte a_bBorderColor; _CEPP_PLACE_AT( 0xcf00 )
cByte a_bBackgroundColor; _CEPP_PLACE_AT( 0xcf01 )
cByte a_fInitialized;
cByte a_fBorderColorSet;
};
----------------------
gelelim ikinci soruya. aslinda dosya akisi soyle oluyor
C++ kodu -> GNU cpp preprocessor -> preprocessed c++ kodu -> cepp -> asm kodu -> Acme crossassembler -> c64 binary
preprocessor gcc nin preprocessoru. onunla uyumluyum yani. Assembler da Acme adli assembler. ben yazmadim.
-----
compiler bir console uygulamasi. Bir ideye isteyen entegre edebilir. ya da make gibi build otomasyon araclari ile kullanilabilir asagi yukari gcc gibi kullaniliyor. daha az olmakla beraber ayni opsiyonlari destekliyor (-o -I -O1 vs). Ben videoda Emacs ve bildigin cmd.exe kullaniyorum.
-----
evet proje daha cok oyunlari (ozellikle strateji ve adventure oyunlarini) hedefliyor. Alisilagelmis c64 demo efektleri acisindan cok fazla bir kullanim alani olmayabilir. VIC efektleri zaten cycle exact olmak zorunda oldugu icin elle yazilmak zorunda. Math efektlerinin her tarafi unroll edilen looplar ve pre calculation tablolari ile dolu.
Ancak particle sistem tarzi efektlerde kullanilabilir. Bilemiyorum yapilacak efekt tipine bagli. Eger kullanabilecegimiz bir efekt bulursak bir Glance demosunda kullaniriz.
-----
Bahsettigin uc yoldan ikincisini tercih etme sebeplerim
- c++'in iyi bir dil oldugunu dusunmem
- hali hazirda var olan c++ development toolarini kullanmak istemem. Syntax higlighting ideler, Intellisense, static analizerlar, code browserlar, UML code generatorlar vs...
- sifirdan dizayn edilmis yeni bir dile gore developerlarin C++ compilerini daha kolay adopt edeceklerini dusunmem
Basic ML'e gore cogu zaman onlarca kat yavas kaliyor. Cepp gerek C64teki Basic interpreter'a gerekse BlitzBasic gibi Basic compilerlarina gore cok cok daha hizli. aslinda cyclic complexitesi dusuk rutinlerde neredeyse elle yazilmis kadar optimum kod uretebiliyor. Cyclic complexite'nin arttigi durumlarda 2 kat civari fazla instruction uretebiliyor.
-----
Ilgin icin tesekkurler. 2008'de Glance demosu gelecek.