667 bajtów - najprostszy program który zrobiłem - czekanie na wciśnięcie klawisza
Sporo zajmuje właśnie ten crt0, który m.in. pobiera linię poleceń z różnych DOSów (w tym tak archaicznych jak DOS XL). Źródło tego (w pliku .s) jest w źródłach cc65.
Wynika z tego że moja prosta funkcja zajeła jakieś 300 bajtów
A kompilowałeś z opcją -O (optymalizacja) ?
printf("a[%d]=%d\n", i, a[i]);
Jeśli printf ma służyć tylko do formatu %d, to przesada go stosować.