pro jakýkoli osmibit je Céčko zkrátka nevhodný jazyk
Tiež by som ako protiargument uviedol AVR8, kde som býval vždy skôr príjemne prekvapený, ako aj netriviálnejšie veci písané v C, vrátane trebárs nejakých dátových štruktúr a algoritmov k nim, to celé volané z interrupt handlerov a pod., vychádzajú po preklade stále relatívne kompaktne a efektívne; ten "wau faktor", čo všetko sa dokáže zmestiť do pár kB výsledného kódu.
Je to ale platforma s 32 všeobecnými registrami, 3 registrami pre indirect (+displacement) adresovanie, bez šaškovania s vecami ako "nultá stránka" pri MOS 6502, takže hej, z pohľadu C prekladača sú o dosť viac friendly. Plus teda zmysluplné toolchainy od začiatku zahŕňali GCC backend (a linker schopný efektívne eliminovať nevyužívaný knižničný kód), nie naivný minimalistický prekladač.
Jasně - to navazuje na mou otázku z dřívějška, že přeci pro Arduino funguje překlad Céčka normálně a optimalizovaně. Tak jsem si o tom něco málo našel a... A je to úžasné číst, jak navrhovali instrukční sadu a adresní módy rovnou dohromady s autory překladače C a architekturu upravovali podle potřeb kompilátoru... A i dál je to z pohledu "našich" osmibitů jako četba z budoucnosti - a taky že je, skoro 20 let poté (1978 vs. 1996). Ale dobře to udělali s tím AVR, všechna čest!
Já bych se 6502 trouchu zastal. Ono to "šaškování" s nultou stránkou byl docela dobrý nápad v době, kdy RAM (i v CPU) byla velmi drahá. Nultá stránka byla prý prezentována jako náhrada za interní registry, takže v tomto smyslu má 6502 256 interních registrů. Jasně, byl to z části marketing a přístup do RAM není totéž jako interní registry, ale aspoň něco. A jsem si docela jist, že právě tento přístup byl jeden z klíčových faktorů, který umožnil, aby byl 6502 tak levný a tím se rozšířil do domácností. Srovnávat AVR a 6502 prostě nejde - 20 let je v IT té doby ještě více, než 20 let v IT dnes. V době vzniku 6502 byl každý 1kiB RAM drahý, každé pouzdro drahé.. I proto byly obvody jako R6532 RIOT https://en.wikipedia.org/wiki/MOS_Technology_6532 a pro (nejen) domácí použití to stačilo.
C byl původně navržen jako "přehlednější assembler" pro psaní nízkoúrovňových utilit pro Unix. Myslím, že v době tvorby 6502 opravdu nikoho ani nenapadlo, že by někdo chtěl použít C pro 6502 ne tak ještě to na 6502 kompilovat a linkovat. O to víc vyniká fakt, že při návrhu AVR už tvůrci brali v úvahu i vlastnosti kompilátoru. A to je vývoj, a je to tak dobře.
přístup do RAM není totéž jako interní registry
V době, kdy byl 6502 vyvinut a kdy se nejvíc používal, byl CPU pomalejší než RAM. Ušetřit místo na chipu a místo toho dát adresovací režimy s nultou stránkou byl chytrý krok.
Z historického hlediska kompilátory tehdy nepotřebovaly hromadu registrů, protože stejně nevěděly, co si s nimi počít, nebo přesněji - kompilátor, jenž by je dokázal efektivně využít, byl na tehdejší poměry dost náročný kousek softwaru, mimo možnosti průměrného osmibitového počítače. Alokace registrů je totiž obecně netriviální NP-úplný problém. Mnohem snadnější je vytvořit kompilátor, který pracuje nad zásobníkem (v tomto ohledu ovšem 6502 zrovna také moc nevyniká). Ostatně, i dnes se často postupuje tak, že se nejprve vygeneruje zásobníkový kód a teprve na ten se pustí registrová optimalizace - proto většina virtual machines je stack-oriented.
Zkrátka u procesorů jako 6502, ale i 8080 (resp. Z80) se předpokládal vývoj v Assembleru a každý nabízel svou cestou mající svá pro a proti.