Vedat, bildiğim kadarıyla minifmod.lib'i kullanarak rahatça 4 kb yapabiliyorsun sıkıştırılmış. 4 kb'ı geçmesinin iki nedeni oluyor genellikle:
1) XM'in boyutu ki yukarda arkadaşlar benim anlatabileceğimden daha güzel açıklamışlar sana yöntemleri.
2) Programının gereksiz includeları. Lib'i eklediğin zaman yanılmıyorsam 4kb'a sıkışıyor ancak sen ekstra libraryler kullanıyorsan eğer, bunları projenden çıkarıp içlerinden yalnızca gerekli bölümleri kopyalaman gerekiyor. Eminim zaten bununla bir hayli cebelleşmişsindir ancak daha da cebelleşmen gerekebilir. Gerekirse inline assembler kullanmaya kadar gider iş.
Inline assembler kullanmakla ilgili bir örnek veriim mesela. 13h modunda özellikle plot rutininde sıkça geçen 320 ile çarpma işlemini hızlı yapmanın yolu c'de 8 bit sola kaydır, 6 bit sola kaydır ve topla şeklindedir. Inline assemblerda ise 6 bit kaydır ve bunu iki bit daha kaymışıyla topla halini alır ki C'de ben ne yaparsam yapiim bu kadar kısa bir şekilde yapamadım olayı. Zaman zaman C bile yetersiz kalabiliyor.
Benim yazabildiğim en az yer kaplayan plot rutini:
void Plot(int x, int y, char color)
{
asm{
mov ax, y
shl ax, 6
mov di, ax
shl ax, 2
add di, ax
add di, x
mov al, color
stosb
}
}
C'de ise
void Plot(int x, int y, char color)
{
BUFFER[(y << 8) + (y << 6) + x] = color;
}
bu şekilde yazabiliyorum.
Eminim ASM'de benim yazdığımdan daha kısası da vardır ancak C ile bu kadarını bile oluşturamıyorum işte.
Kısacası biraz daha low level'a inmen gerekebilir.