Zatím jsem si nenašel čas článek přečíst, ale při rychlém pohledu jsem nenašel odkaz na Small Device C Compiler (SDCC) https://sourceforge.net/projects/sdcc/
Před lety jsem ho zkoušel a podařilo se ho na 8051 použít s variantou našich multi-master RS-485 driverů z projektu uLAN http://ulan.sourceforge.net/
Snažil jsem se tak zachránit a učinit použitelnou i pro ostatní práci, kterou jsme do projektu vložili. Kolegovi na starých jednotkách na 8051 možná již 20 let řídí protokol žaluzie, otevírání vrat a další na jejich domečku. Nyní ale stejně vše nové máme na ARMech a GCC.
Zkoušel jsem, jestli by SDCC zvládlo i některý můj složitější kód, třeba mojí náhradu C++ STL stromů a map v makrech pro plain C. I jsem kvůli tomu pár oprav do projektu poslal, ale složitější kód s ukazateli vycházel i na délku proti dnešním procesorům hodně špatně nikdy se mi nepodařilo udržet kompilaci mainline SDCC delší dobu bez chyb. Vždy se pi vývoji kompilace složitého kódu s mnoha inline nakonec pokazila...
Ale pro mnoho projektů je SDCC asi to nejlepší co lze pro osmibity zdarma sehnat. Přitom obsahuje i assembler, linker atd...
Podporuje Intel MCS51 i s 16 bit variantami, HC08, Zilog Z80 i s 16 bit variantami,, STM8 a PIC.
Obecně pro procesory, které nejsou schopné vytvářet za rozumnou cenu zásobníkové rámce pro předávání parametrů do funkcí a lokální proměnné je to řešení, které má smysl zvážit. Lepší je ale se od takových procesorů raději úplně odstřihnout.
Pri kompilácii pre 6502 používam makro assembler ASL (http://john.ccac.rwth-aachen.de:8000/as/) . Podporuje viacero CPU a je stále vo vývoji.
Jedna zajímavost o CA65. Jeho výstupem není spustitelný kód, ale objektový kód, který se předává Linkeru LD65. Je tak podporován tzv. oddělený překlad (separate compilation), kdy se zdrojové texty zkompilují samostatně do objektových souborů a pak slinkují do výsledné spustitelné binárky. Tak lze naplno využít utilitu make nebo něco podobného.
Je to samozřejmě dáno tím, že CA65 je dodávaný k překladači jazyka C a překladače jazyka C musí oddělený překlad podporovat.
Většinou umí (3)86 i ARM assemblery používat pseudoinstrukce, například dlouhé skoky, načtení konstanty (u ARMu obecně problém) atd. Existuje něco podobného i zde?
Příklad: mám nějaký podmíněný skok, který se krásně vleze do rozsahu -127 až 127 (nebo 128, teď už nevím, jak přesně to 6502 počítá). A vložím do smyčky další instrukce, takže takový skok už není možný, Assembler by mohl vložit opačný podmíněný skok následovaný přímým dlouhým skokem.
Tedy namísto například původně:
LOOP:
...
BNE LOOP
By se převedlo na:
LOOP:
...
BEQ SKIP
JMP LOOP
SKIP:
Ideálně s lokálním labelem SKIP :-)
No, podľa informácií z internetu, projekt Atalan upadol pred pár rokmi do hibernácie (autor Kudla vraj už nemal naň čas) a posledné aktívne záznamy sú spred 3 rokov, keď nejaká dobrá duša umiestnila projekt na GitHub (další update ale už nebol). Máte vari informáciu, že projekt opäť ožil? Resp. okrem ilustračných príkladov z GitHub či stránky projektu, existujú nejaké iné príklady? Alebo, existuje nejaká komunita aktívnyh vývojárov v tomto jazyku?
No dá se říci že ano. Protože když jsem Kudlovi řekl, že o Atalanu budu psát, tak prohlásil, že ho to zase začíná zajímat :-)
Ale jinak u těchto projektů hibernace znamená asi to, že je překladač dostatečně stabilní. I když další nápady na jazykové konstrukce a možné optimalizace tady jsou - asi Kudlovi udělám pár issues do GH.