( bucko | 2022. 11. 30., sze – 22:38 )

Azért olvasd el azt is, amit feljebb írtam! Ha kell, van 96 regiszter is. Meg amit előbb írtam! VAN indexregiszter, csak számodra (és a GCC fejlesztői számára) idegen, mert nem a 68000 szerinti általános regiszterhalmaz része.

MPLAB XC8 Compilers support all 8-bit PIC® and AVR® microcontrollers...

Tehát van olyan fordító, amelyik mindkettőt támogatja, vagyis megcsinálható és meg is csinálták.

A magasszintű nyelveket támogató cpu-ra könnyű portolni egy C fordítót. A PIC teljesen más filozófiával készült, szerintem nem is a legutolsó, hanem egyáltalán nem szempont, hogy miiyen szabványnak megfelelő C-t támogat. Van C, ha abban szeretnél programozni vagy létező lib-et használni. Az elsődleges szempont itt a hardver, mert annak alapján választod ki a példányt. Legyen benne legalább 4 db CLC, viszont a C89 tökmindegy. Ugyanaz a kód valószínűleg fog futni egy másik típuson is, amiben van 4 db CLC. Vagyis nem tudsz és nem is akarsz PIC -> x86 irányba hordozható kódot előállitani. ;)  (Na, a topicnyitó az üdítő kivétel.) Talán az 512B flash  (<= 256 utasítás) + 25B ram esetében fontosabb szempont, hogy csak 6 vagy 8 lába van.

A PIC esetében nem kell "okos" fordító, mert berúgod a hardvert és működik. Ez az egyszerű dolog C-ben általában bonyolultabb módon írható le.

Kedvedért itt a mintafüggvényed XC8 fordító C99 módban, kísértetiesen hasonlít az én pontatlan kódomra.

7D7E  EE00     LFSR 0, 0x1           ;X=&a
7D82  0E14     MOVLW 0x14            ;W=20
7D84  6AEE     CLRF POSTINC0, ACCESS ;loop: *X++=0
7D86  06E8     DECF WREG, F, ACCESS  ;W--
7D88  E1FD     BNZ 0x7D84            ;i!=0 -> goto loop
7D8A  0100     MOVLB 0x0
7D8C  EFB8     GOTO 0x7D70

Ennek ellenére nem használok C fordítót, mert a régiek tényleg vállalhatatlanok, az újak meg fizetősek. Ráadásul akkora apparátus kell hozzá...

Érdekességképp a hasonó szerkezetű 8051 sem támogatott, az SDCC kezeli (?),  de a PIC támogatás 2-3 példány után elhalt. Az egyetlen használható asm fordító a gputils, viszon Dunát lehet rekeszteni az elhalt és / vagy működésképtelen ópenszósz PIC utilitiessel.