Parallax Propeller

Parallax Propeller dual in-line tokozásban
Parallax Propeller TQFP tokozásban

A Parallax Propeller, terméknevén P8X32A, egy többmagos párhuzamos architektúrájú mikrovezérlő integrált áramkör, amely nyolc függetlenül működő 32 bites csökkentett utasításkészletű (RISC) mikroprocesszor (CPU) maggal rendelkezik. A Parallax, Inc. tervezte, 2006-ban mutatták be, és jelenleg is ez a cég forgalmazza.

A Propeller mikrovezérlőt, a Propeller assembly nyelvet és a Spin interpretert maga Chip Gracey, a Parallax társalapítója és elnöke tervezte. A Spin programozási nyelvet és a Propeller Tool integrált fejlesztői környezetet (IDE) Chip Gracey és Jeff Martin, a Parallax szoftvermérnöke tervezte.

2014. augusztus 6-án a Parallax Inc. az összes Propeller 1-es P8X32A hardvert és eszközt nyílt forráskódú licenc alá helyezte, nyílt forráskódú hardverként és szoftverként a GNU General Public License (GPL) 3.0 változatú licenc alatt. Ezek körébe beletartozik a hardver Verilog forráskódja, a felső szintű HDL fájlok, a Spin értelmező, a PropellerIDE és SimpleIDE programozási eszközök és fordítóprogramok.

2020-ban jelent meg a Parallax Propeller 2 (P2X8C4M64P) többmagos mikrovezérlő, amely egy közös hubhoz kapcsolódó 8 azonos 32 bites processzort tartalmaz.

Többmagos architektúra

Az eszköz központi megosztott memóriája 32 KiB méretű közvetlen hozzáférésű memória (RAM) és 32 KiB csak olvasható memória (ROM). Az osztott memóriához történő hozzáférést egy belső, hub-nak nevezett sínvezérlő felügyeli, körforgásos (round-robin) rendszerben – a hub jelentése kerékagy, itt központ, elosztó, koncentrátor jelentéssel értendő. Az eszközben nyolc 32 bites mag található, amelyeket cog-nak, (fogas)kerékfognak neveztek el. Ezek mindegyike rendelkezik egy processzorral, és 512 32 bites szó, azaz 2 KiB méretű memóriával, az utasítások és adatok tárolásához. A cogok Propeller assembly (PASM, alacsony szintű) és Spin nyelven programozhatók. A Spin egy objektumalapú magas szintű nyelv, melyben a forráskódot a nyelv fordítóprogramjával bájtkódra fordítják, és ezt a kódot dolgozza fel és hajtja végre az eszközben a Spin interpreter. A Spin nyelvű programokban szubrutinok és beágyazott assembly nyelvű kódrészletek használhatók. Az önmódosító kód lehetséges és belsőleg használja is a rendszer, például amikor a boot loader (rendszerbetöltő program) felülírja magát a Spin interpreterrel. A Spin szubrutinok a szokásos hívás-visszatérés technikával hívhatók, amihez egy hívási verem szükséges. Az assembly kódnak nincs szüksége hívási veremre. Minden cog hozzáfér két dedikált hardveres számlálóhoz és egy speciális videógenerátorhoz, amelyek PAL, NTSC, VGA, szervómechanizmus-vezérlés/irányítás, és más időzítőjelek előállítására használhatók.

Sebesség és energiagazdálkodás

A Propeller különböző órajelekkel vezérelhető, amit szolgáltathat egy belső, lapkára integrált oszcillátor (ez alacsonyabb alkatrészszámot biztosít, viszont a pontossága és termális stabilitása kisebb), vagy külső kristályoszcillátor vagy kerámiarezonátor, ami nagyobb maximális sebességet és nagyobb pontosságot biztosít, de magasabb összköltséggel jár. Csak a külső oszcillátor futtatható a lapkára integrált fáziszárt hurok (PLL) órajelszorzón keresztül, amely 1x, 2x, 4x, 8x vagy 16x értékre állítható be.

Mind a kártyára szerelt oszcillátor frekvenciája, mind a PLL szorzó értéke futás közben változtatható. Helyes használat mellett ez javíthatja az energiahatékonyságot; például a PLL szorzó csökkenthető egy hosszú, időzítéshez szükséges, művelet nélküli várakozás előtt, majd utána visszaállítható, ezzel a processzor energiafogyasztása is csökken. Ennek a technikának a hasznossága viszont csak azokra a helyzetekre korlátozódik, amikor más cog nem hajt végre időzítésfüggő kódot (vagy gondosan úgy van megtervezve, hogy megbirkózzon a változással), mivel az effektív órajel-frekvencia minden cog számára közös.

Az effektív órajelfrekvencia 32 kHz-től a maximális 80 MHz-es órajelig terjed (a pontos értékek a dinamikus vezérléshez a használt konfigurációtól függenek). 80 MHz-es sebességen, a Spin programnyelv interpretált végrehajtása közel 80 000 utasítástokent hajt végre másodpercenként minden magon, ami összesen 8-szor 80 000, azaz 640 000 magas szintű utasítás másodpercenként. A legtöbb gépi nyelvű utasítás végrehajtása 4 órajelciklust igényel, ami végül 20 millió utasítás másodpercenként (MIPS) egy magon (cog), vagy 160 MIPS a teljes 8 magos Propelleren.

Az energiafogyasztás csökkenthető az órajel-frekvencia csökkentésével, a felesleges cogok kikapcsolásával (amelyek ezután kevés energiát használnak) és a szükségtelen be/kimeneti kivezetések átkonfigurálásával, vagy biztonságosan áthelyezhetők egy nagy impedanciájú állapotba (háromállapotú) bemenetként. A kivezetések dinamikusan átkonfigurálhatók, de itt is érvényes az elv, hogy a változás az összes cogra vonatkozik, így bizonyos kialakításokban szükség lehet szinkronizálásra. Bizonyos védelem rendelkezésre áll olyan helyzetekre, mikor az egyik mag kimenetként próbál használni egy tűt, míg egy másik bemenetként próbálja használni ugyanazt; a Parallax műszaki referencia-kézikönyv kifejti ezt az esetet.

Beépített perifériák

Mindegyik cog hozzáfér néhány dedikált számláló-időzítő hardverhez, valamint egy speciális időzítő jelgenerátorhoz, amelynek célja, hogy egyszerűsítse a videókimeneti fokozatok kialakítását, mint például a kompozit PAL vagy NTSC kijelzők (beleértve a sugárzáshoz szükséges modulációt) vagy a VGA monitorok. A Parallaxtól elérhető olyan mintakód, ami képes videójeleket generálni (szöveg és kissé alacsony felbontású grafika) minimális alkatrészhasználattal, amely mindössze a Propeller csipből, egy kristályoszcillátorból, és néhány ellenállásból áll, egy egyszerű digitális-analóg átalakító (DAC) kialakítására. Az oszcillátorfrekvencia ilyenkor lényeges, mivel a videóidőzítő hardver korrekciós képességét az órajel-frekvencia korlátozza. Egy videójel előállításához akár több cog is használható párhuzamosan. Általánosabban, az időzítő hardver különböző impulzusszélesség-modulációjú (PWM) időzítő jelek előállítására használható.

ROM kiterjesztések

A beépített ROM-ban a Spin interpreter és a boot loader (rendszerbetöltő program) mellett található néhány táblázat, amelyek hasznosak lehetnek bizonyos hang-, videó- vagy matematikai alkalmazásokban:

A matematikai kiterjesztések célja, hogy kompenzálják a lebegőpontos egység hiányát, valamint az olyan egyszerűbb hiányzó műveleteket, mint a szorzás és az osztás (ezt a Spin program elfedi, de az assembly nyelvű rutinokban korlátozó tényező). A Propeller 32 bites processzor, és ezek a táblázatok nem nyújtanak elegendő pontosságot a precízebb számításokhoz.

Beépített Spin bájtkód-interpreter

A Spin egy többfeladatos, magas szintű számítógépes programozási nyelv, amely a Propeller mikrovezérlőkön futó programok fejlesztésére szolgál.

A Pythonhoz hasonlóan a Spin is szóközökkel történő behúzásos szintaxist használ, nem pedig kapcsos zárójeleket vagy kulcsszavakat a blokkok elválasztására.

A Spin kód fejlesztése a Propeller Tool nevű szoftverrel történhet, amely egy eredetileg Windows XP-re készült GUI-orientált szoftverfejlesztő platform. Ez a szoftver a Spin nyelvű forráskódot bájtkódra fordítja, amely ugyanezzel a fejlesztőeszközzel feltölthető a Propeller csip fő 32 KiB RAM-jába, és opcionálisan az I²C soros sín boot- (rendszerindító) EEPROM-jába is.

A Propeller indulása (boot) után a beépített ROM-ból egy bájtkód-értelmező másolódik az elsődleges cog 2 KiB méretű RAM területére, felülírva a boot loadert. Ezután ez a cog elkezdi értelmezni ill. végrehajtani a fő 32 KiB-os RAM-ban elhelyezkedő bájtkódot. Az értelmező dekódolja az utasítássorozatokat, egy utasítást bájtonként. A bájtkód-értelmezőnek más példányai is futhatnak ugyanekkor más cogokban, így több Spin kódú szál futhat egyszerre. A Spin kódú programokba assembly kódú programrészeket is be lehet illeszteni „inline” módon. Ezek az assembler programrészek ezután a saját cogjaikon futnak.

Mivel a Spin szoftveresen értelmezett nyelv, lassabban fut, mint a tiszta Propeller gépi kód, de a helykihasználása jobb lehet: a Propeller assembly opkódok 32 bit hosszúak; a Spin direktívák 8 bitesek, és ezeket további 8 bites bájtok követhetik, amelyek meghatározzák az adott direktíva működését.

Indításkor a bájtkód értelmező egy (kevesebb mint 2 KiB méretű) példánya bemásolódik egy cog dedikált RAM-jába és elkezdi feldolgozni a bájtkódot, amely a fő 32 KiB RAM-ban helyezkedik el. További cogok indíthatók ezen a ponton, az értelmező egy különálló példányát/másolatát betöltve az új cog dedikált RAM-jába – így összesen nyolc értelmező szál futhat egyszerre. Ez azt jelenti, hogy minden Propeller alkalmazás esetében legalább egy minimális mennyiségű indító kódnak Spin kód formájában kell jelen lennie.

Szintaxis

A Spin szintaxisában a programot különböző típusú blokkok alkotják, amelyek a következőket tartalmazzák:

Példák a kulcsszavakra

Példaprogram

Egy példaprogram (ahogyan az a Propeller Tool szerkesztőprogramban megjelenne), amely minden 3 000 000 ciklus után kiírja egy portra az aktuális rendszerszámlálót, és 40 000 000 ciklus után leállítja egy másik cog:

Tokozás és perifériás kapcsolatok

Az eszköz P8X32A jelű kezdeti verziója egy 32 bites portot biztosít a 40 tűs 0,6 hüvelykes DIP, 44 tűs LQFP vagy QFN (lapos vezetékmentes felületre szerelhető) tokozáson. A 40 rendelkezésre álló érintkezőből 32 a bemeneti/kimeneti vonalakhoz csatlakozik, négy a tápellátás és földelés számára, kettő külső kristály csatlakoztatására (ha használják), egy áramkimaradás és feszültségcsökkenés észlelésére, és egy a reset/alaphelyzetbe állítás céljaira szolgál.

Mind a nyolc mag hozzáférhet egyidejűleg a 32 bites porthoz (amelyet „A”-val jelölnek; jelenleg nincs „B”). A rendszer egy speciális szabályozó mechanizmust alkalmaz a bemeneti/kimeneti konfliktusok elkerülésére, ha az egyik mag kimenetként, míg a másik bemenetként próbálja használni az I/O csatlakozót. A be-/kimeneti csatlakozók közül bármelyik használható a fent említett időzítési vagy impulzusszélesség-modulációs kimeneti technikákhoz.

A Parallax közölte, hogy a Propeller későbbi verziói várhatóan több be-/kimeneti csatlakozóval és/vagy több memóriával rendelkeznek majd.

Virtuális be-/kimeneti eszközök

A Propellert a „virtuális be/kimeneti eszközök” koncepciója alapján tervezték. Például a HYDRA Game Development Kit (egy amatőröknek tervezett számítógépes rendszer, retró stílusú videójátékok fejlesztésének támogatására) a beépített karaktergenerátort és videótámogató logikát használja egy virtuális grafikai processzor-generátor létrehozásához, amely színes VGA képet, PAL/NTSC kompatibilis színes kimenetet állít elő, vagy RF video+audio folyamot küld ki szoftverből.

Szoftverkönyvtárak állnak rendelkezésre számos be-/kimeneti eszköz megvalósításához, melyekben megtalálhatók az egyszerű UART-ok és soros be-/kimeneti interfészek, mint például SPI, I²C, továbbá PS/2 kompatibilis soros egér és billentyűzet interfészek, motor meghajtók, robotikai rendszerek, MIDI interfészek és LCD vezérlők.

Dedikált magok megszakítások helyett

A Propeller tervezési filozófiája az, hogy a kemény valós idejű sokmagos architektúra szükségtelenné teszi a dedikált megszakítási hardvert és a gépi kódú támogatást. A hagyományos CPU architektúrában a külső megszakítási vonalak meghajtják a lapkára integrált megszakításvezérlőt és egy vagy több megszakításkiszolgáló rutin szolgálja ki ezeket. Mikor fellép egy megszakítás, a megszakításvezérlő felfüggeszti a CPU normál működését és elmenti a belső állapotot (jellemzően a verembe), ezután a megszakítási vektorok alapján átadja a vezérlést az adott megszakítást kiszolgáló eljárásra. A megszakítás kezelése után a kiszolgáló eljárás végrehajt egy „visszatérés megszakításból” utasítást, ami visszaállítja a belső állapotot és folytatja a CPU működését.

A külső jelek azonnali kezelésére a Propeller 32 I/O vonalának bármelyike beállítható bemeneti vonalként. Ezután egy cog úgy konfigurálható, hogy várakozzon az adott bemeneten egy átmenetre (pozitív vagy negatív él), felhasználva a cogokhoz rendelkezésre álló két számláló áramkör egyikét. A jelre való várakozása közben a cog kis fogyasztású módban működik, lényegében alvó állapotban van. Ezt a technikát kiterjesztve a Propeller beállítható úgy, hogy max. nyolc független megszakítási vonalra reagáljon, alapvetően nulla késleltetéssel. Alternatív módon egy vonal használható a megszakítás jelzésére, majd további bemeneti vonalak olvasásával meghatározható az esemény jellege. A többi magban futó kódra nincs hatással a megszakításkezelő cog. A hagyományos többfeladatos egyprocesszoros megszakítási architektúrával ellentétben a jelre adott válasz időzítése determinisztikus, teljes mértékben meghatározott, és ebben a kontextusban még a „megszakítás” kifejezés használata sem helyénvaló, mivel ez a funkció inkább egy nulla ciklusidővel történő lekérdezésnek tekinthető.

Boot mechanizmus

Bekapcsoláskor, feszültségesés (brownout) észlelésekor, szoftveres vagy külső hardveres alaphelyzetbe állításkor (reset) a Propeller betölti a gépi kódú boot rutint a belső ROM-ból az első (fő) cog RAM-jába és végrehajtja azt. Ez a kód szoftveresen emulálja az I²C soros síninterfészt, ideiglenesen felhasználva két be-/kimeneti kivezetést a szükséges soros óra- és adatjelekhez, hogy betöltse a felhasználói kódot egy külső I²C EEPROM-ból.

Ezzel egyidejűleg emulál egy soros portot, felhasználva két másik be-/kimeneti kivezetést, ami a szoftver feltöltésére használható közvetlenül a RAM-ba (és opcionálisan a külső EEPROM-ba). Ha a Propeller nem kap parancsokat a soros portról, akkor betölti a felhasználói programot (amelyben a belépő kódnak Spin nyelvűnek kell lennie, az előzőek szerint) a soros EEPROM-ból a fő 32 KiB RAM-ba. Ezt követően betölti a Spin értelmezőt a beépített ROM-ból az első cog dedikált RAM területére, felülírva a bootloader nagy részét.

Függetlenül attól, hogy a felhasználói program hogyan kerül betöltésre, a végrehajtás az elsődleges cogon futó Spin értelmezővel kezdődik, ami értelmezi és végrehajtja a kezdeti felhasználói bájtkódot. Miután ez a kezdeti Spin kód lefutott, az alkalmazás képes bekapcsolni bármely nem használt cogot, hogy egy új szálat és/vagy assembly nyelvű rutinokat indítson.

Külső állandó memória

A Propeller egy külső soros EEPROM-ról indul (bootol); miután a boot sorozat befejeződik, ez az eszköz külső perifériájaként érhető el.

Más nyelvű megvalósítások

A Spin és a Propeller alacsony szintű assemblere mellett számos más nyelvet is portoltak hozzá.

C fordító

A Parallax támogatja a Propeller-GCC-t, amely a GNU Compiler Collection (GCC) fordítóprogram egy portja a C és C++ programozási nyelvekhez a Propeller számára (branch release_1_0). A C fordítóprogram és a C könyvtár ANSI C kompatibilis. A C++ fordítóprogram ANSI-C99 kompatibilis. A teljes C++ támogatott külső memóriával. A SimpleIDE program egyszerű módot kínál a felhasználóknak programok írására make-fájlok nélkül. 2013-ban a Parallax beépítette a Propeller-GCC-t és a Simple könyvtárakat a Propeller-C Learn oktatóanyag-sorozatába. A Propeller-GCC aktívan karbantartják. A Propeller-GCC és SimpleIDE hivatalosan támogatott Parallax szoftvertermékek.

Az ImageCraft ICCV7 for Propeller C fordítóprogramot életciklusának végére jelölték (end-of-life állapot).

Elérhető egy ingyenes ANSI C fordítóprogram, a Catalina. Ez az LCC-n alapul. A Catalina aktívan karbantartott.

BASIC fordító

A PropBASIC egy BASIC programozási nyelv a Parallax Propeller mikrovezérlőhöz. A PropBASIC-hez szükség van a Brad's Spin Tool (BST) szoftverre, ami egy platformfüggetlen eszközkészlet a Parallax Propellerrel történő fejlesztéshez. 2015 augusztusától a BST az i386-linux-gtk2, a PowerPC-darwin (Mac OS X 10.4 – 10.6), i386-darwin (Mac OS X 10.4 – 10.6) és i386-Win32 (Windows 95 – Windows 7) rendszereken fut.

Forth a Propelleren

A Forth legalább hat különböző változata érhető el a Propellerhez, kereskedelmi és nyílt forráskódú szoftver formájában.

PropForth

A PropForth egy szabad/ingyenes verzió, amely széles körű fejlesztői és közösségi támogatást élvez. Ez a Propeller architektúrához van igazítva, és szükségszerűen eltér minden általános szabványtól az architektúra egyedisége tekintetében, összhangban maradva a Forth koncepciójával.

A Forth értelmezőn túl a PropForth sok olyan funkciót kínál, amelyek kihasználják a csip képességeit. A „Linked I/O” egy stream és egy folyamat összekapcsolásának módszerét jelenti, amely lehetővé teszi, hogy az egyik folyamat az alkalmazás számára átlátható módon, menet közben kapcsolódjon a következőhöz. Ez csökkentheti vagy kiküszöbölheti a hardveres hibakeresés vagy JTAG interfész szükségességét. A „Multi-Channel Synchronous Serial” (MCS, többcsatornás szinkron soros) a Propeller csipek közötti szinkron soros kommunikációra utal. 96 bites csomagok cserélődnek folyamatosan két cog között, ennek az eredménye az, hogy az alkalmazások további erőforrásokat látnak (+6 cog minden hozzáadott Propeller csip után), ami egy jól felépített alkalmazás esetében alig vagy egyáltalán nem befolyásolja az átviteli sebességet.

A „LogicAnalyzer” egy olyan kiterjesztéscsomagot jelent, amely szoftveres logikai analizátort valósít meg. Az EEPROMfilesystem és SDfilesystem olyan kiterjesztések, amelyek egyszerű tárolót implementálnak EEPROM és SD flash használatával.

A „PagedAssembler” egy olyan optimalizálási csomagot jelenti, amely lehetővé teszi az assembler rutinok menet közbeni cseréjét (ki- és bemásolással, felülírással), lehetővé téve a látszólag korlátlan alkalmazásméretet. A szkript végrehajtása lehetővé teszi a kiterjesztések menet közbeni betöltését, ami lehetővé teszi, hogy a programforrás mérete elérje maximálisan a tároló adathordozó/média méretét.

Propeller és Java

Van próbálkozás Java virtuális gép (JVM) megvalósítására a Propeller hardveren. Fejlesztés alatt áll egy fordítóprogram, hibakereső és emulátor.

Pascal fordító és futtatókörnyezet

A Pascal nyelv egy nagy részhalmazát valósítja meg a Propelleren a p-kódú P4 rendszeren alapuló fordítóprogram és értelmező.

Grafikus programozás

Képernyőkép a PICoPLC létradiagram-szerkesztőről

A PICo programozható logikai vezérlő (PLC, PICoPLC) támogatja a Propeller processzorra történő kimenetet. A programot egy GUI létralogika szerkesztőben hozzák létre, és a kapott kód Spin forrásként kerül kibocsátásra. A PICoPLC támogatja még a P8X32-t is, létrehozás-szimulálás-futtatás funkcióval. Nincs korlátozás a célhardverre vonatkozóan, mivel az oszcillátor frekvenciája és az I/O érintkezők szabadon konfigurálhatók a létradiagram-szerkesztőben.

Jövőbeli verziók

2014-től a Parallax egy új Propellert épít, amelynek cogjai körülbelül 200 MIPS sebességgel működnek, míg a jelenlegi Propeller cogjai csak körülbelül 20 MIPS-sel működnek. A javított teljesítmény a maximális órajel (a korábbi 80 MHz-ről) 200 MHz-re történő növelésének és egy olyan architektúrának köszönhető, amely futószalagos technológiát implementál, ezzel átlagosan közel egy utasítást hajtva végre órajelciklusonként, ami körülbelül tízszeres növekedés.

Jegyzetek

  1. ↑ Torrone, Phillip (2006. február 18.). "First look at Parallax's Propeller chip". Make blog. 2008. június 25. dátummal az eredeti címről archiválva.
  2. ↑ Torrone, Phillip (2006. augusztus 21.). "Parallax Propeller (review)". Make.
  3. ↑ Gracey, Ken (2014). "Propeller 1 Open Source". Parallax Inc. Hozzáférés: 2021. január 23.. The Propeller 1 (P8X32A) is now a 100% open multicore microcontroller, including all of the hardware and tools ... The Propeller 1 may be the most open chip in its class.
  4. ↑ Wong, William G. (2022. december 15.). "EiED Online>> Parallax Propeller".
  5. ↑ Scanlan, David A.; Hebel, Martin A. (2007. október). "Programming the eight-core propeller chip". Journal of Computing Sciences in Colleges. 23 (1): 162–168.
  6. ↑ "Prop Tool". Propeller wiki atWikispaces. 2008. október 1. dátummal az eredeti címről archiválva.
  7. 1 2 "Parallax Forums message". Parallax Forums. 2010. szeptember 24. dátummal az eredeti címről archiválva. Hozzáférés: 2010. augusztus 8.
  8. ↑ "Propeller Video Application Board PCB". SelmaWare Solutions. 2008. december 21. dátummal az eredeti címről archiválva.; a dedicated video generator board with a propeller
  9. ↑ "Parallax Forums post about screen capture software". Parallax Forums.{{cite web}}: CS1 karbantartás: elavult archiválási szolgáltatás (link)
  10. ↑ GitHub: ; Propeller objektumcsere-szoftverkönyvtár
  11. ↑ "Interrupts". Propeller wiki at Wikispaces. 2010. szeptember 21. dátummal az eredeti címről archiválva.
  12. ↑ Cantrell, Tom (2006. augusztus). "Turning the Core-ner". Circuit Cellar. No. 193. 80. o.{{cite magazine}}: CS1 karbantartás: elavult archiválási szolgáltatás (link)
  13. ↑ "PropGCC on Google Code".
  14. ↑ "Propeller C - Set Up SimpleIDE". learn.parallax.com.
  15. ↑ "Propeller C". learn.parllax.com.
  16. ↑ "ICCV7 for Propeller (Non-Commercial) - End of Life". Parallax Inc. 2011. szeptember 18. dátummal az eredeti címről archiválva.
  17. ↑ "Catalina - a FREE C compiler for the Propeller - The Final Frontier!". Parallax Forums.{{cite web}}: CS1 karbantartás: elavult archiválási szolgáltatás (link)
  18. ↑ "Download PropBASIC here... 00.01.14 LAST VERSION FOR BST". Parallax Forums. 2009. december 23.
  19. ↑ "propforth". code.google.com.
  20. ↑ "Programming in Java". Propeller wiki at Wikispaces. 2008. október 4. dátummal az eredeti címről archiválva.
  21. ↑ "Programming in Pascal". Propeller wiki at Wikispaces. 2008. október 4. dátummal az eredeti címről archiválva.
  22. ↑ PICoPLC fejlesztő honlapja, nem elérhető
  23. ↑ "Propeller 2". Parallax Inc. 2020. július 23.

Fordítás

Ez a szócikk részben vagy egészben a Parallax Propeller című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

Források

További információk

Commons:Category:Parallax Propeller
A Wikimédia Commons tartalmaz Parallax Propeller témájú médiaállományokat.

Kapcsolódó szócikkek