CC65 v prostredí NetBeans resp. MS Visual Studio – časť 2

Tento príspevok je pokračovaním prvej časti pokecu o rozchodení CC65 kompilátora v IDE:

Au.

Ozvala sa škaredá hláška, že compiler nevie nájsť stdio.h knižnicu. Poblúdil som po stránke www.cc65.org, kde som vo FAQ našiel, že je potrebné nastaviť environment variables, aby compiler vediel nájsť svoje includes. Veselo som teda nastavil parameter CC65_HOME a na moje počudovanie mi compiler vyhlásil rovnakú chybu. Na to som zatiaľ prdel, tak som si povedal, že skúsim medzitým rozchodiť includy precompilera, aby mi nepodčiarkoval všetky funkcie na červeno. Nasetoval som teda include directories v parametroch projektu a stále to bolo červené. Ono mi aj bolo divné, že je ten include riadok zapísaný takto:

#include ” stdio.h ”

Až keď som to dal zase skompilovať CC65kou som si všimol, že ten chudák tam tie medzery nemá mať. Toto by sa mi samozrejme nestalo, keby som nekopčil tento example priamo z atarionline.pl, kde Jakub napísal, že tam musel dať medzery pretože mu to ich CMSko nevedelo zožrať. Samozrejme ako človek nehovoriaci po polsky som tento fakt v texte prehliadol a hneď bol problém na svete.
Tak som teda tie pekelné medzery praskol do Péčka (ako sa u nás vraví) a čuduj sa svete, CC65 mi úspešne skompiloval tento príklad. No naparádu naparádu, ale ako je možné, že precompiler stále podčiarkuje funkcie červenou?
Može za to direktíva prekladača __fastcall__. Táto sa nachádza pred každým názvom funkcie a chudák (NetBeansovský štandardný Cčkový) precompiler netuší o čo kráča.
Po niekoľkých testoch a neúspešnom pokuse zistiť info na NetBeans fóre a ich IRCčku (akože shitovejší community support som ešte nezažil).. som to zriešil tak, že pridám pred všetky includes prázdnu definíciu __fastcall__:

#define __fastcall__

Super fasa, precompiler ožil, NetBeans mi veselo začal podhadzovať funkcie.

Keď som však porovnal výstupnú binárku, bola o niekoľko bytov vačšia ako tá, kde som __fastcall__ nedefinoval. Povedal som si, že dlabem na to, budem písať program normálne a až keď ho budem releasovať tak zakomentujem vyššie spomínaný define a bude to ok.

Takže písať kód sa dá pekne aj s podhadzovaním, kompilovať tiež ide, teraz ešte nejako rozchodiť spustenie binárky v emulátore cez nejaké tlačko v rámci IDE.

Au.

Ako hľadám tak hľadám, žiadna možnosť volať external command. Akože choďte mi do prdele. Nakoniec som sa zase googlením dostal k tomu, že musím v NetBeans napísať nejaký NetBeans module, ktorý mi takéto niečo umožní. Teda videl som už všeličo, ale toto už bolo na mňa priveľa, hádžem bobek na celý NetBeans… to aby sa človek tri dni sral z rozchodením IDE nie je normálne.

Tak som si povedal, že skúsim predsa inštalnúť to Microsoft Visual C++ 2010 Express aj napriek tomu, že mám už na kompe nainštalovaný Microsoft Visual C# 2010 Express. V úvode prvej časti tohto článku som predpokladal, že nemôžem mať dve Express edície na jednom hoste a teraz som sa po pekelnej skúsenosti s NetBeans rozhodol overiť tento fakt.

Zbehol som teda na Microsofťácky web, kde som sa preklikal k Express editions a naťahal som si inštalačku. Pustil som sa do inštalácie s obavami, že sa to s tým C# bude biť, ale všetko prebehlo úspešne a naozaj to frčí fasácky. Špecifikum je akurát to, že obe edície majú separátnu binárku, ktorou spustím dané prostredie.
Tým chcem povedať, že sa to javí úplne oddelene a keď spustím C# tak môžem vytvoriť len C# projekt, rovnako to platí aj pre C++. (len pre info: vo Visual Studio Professional je jedno prostredie, kde môžem vytvárať projekty v ktoromkoľvek z nainštalovaných jazykov).

Okey, nastavil som si prostredie za pomoci Jakubových screenov, ale nastal zase zádrhel. V Express edícii nemôžem debugovať neštandardný code type definovaný projektom. Táto veta znie mierne odveci, ale fakt to zobrazilo takúto hlášku. Problém bol v tom, že som mu nastavil, že keď kliknem na tlačko debug/run, má sa spustiť:

C:\Program Files\Atari800WinPLus\Atari800Win.exe -run x.xex

Smola teda, musel som to spraviť ináč.

hehehe, počas písania tohto článku sa mi to podarilo rozbehať 😀
Nevadí, aj tak popíšem ako som to predtým obišiel…

Takže som si povedal, že to spravím tak, že si vytvorím vlastný toolpanel a na neho si prihodím dva external tooly a to “Build” a “Atari800win”. Našťastie vo VS nie sú také obštrukcie ako v NB, takže to nebolo veľmi zložité.
Treba si otvoriť Tools->External Commands, zadefinovať oba commandy (v mojom prípade boli na 4. a 5. mieste v zozname). Potom kliknúť pravým tlačítkom na nástrojovú lištu a zvoliť Customize… V prvej záložke som si vytvoril Atari toolbar a v druhej záložke som si zaklikol toolbar Atari a vložil do neho External Command 4 a External Command 5 zo skupiny Tools. Nastavenia som potvrdil a BUM, toolbar je na svete a ešte aj funguje :).

Skúsil som pridať nejaké Atari specific príkazy, aby som odskúšal, či všetko funguje ako má, pretože doteraz som robil len “trápny” výpis textu na obrazovku. Keď som ale program doplnil o “vysokoakčný” príkaz _setcolor(2,4,4); zistil som, že sa mi program so zadefinovaným __fastcall__ nevygeneruje správne, resp. setcolor nebude fungovať tak ako má.

No do rite, čo s tým?

Našťastie riešenie nebolo zložité. Pre IDE je dôležité aby bola direktíva __fastcall__ zadefinovaná, lebo ináč nefrčí podhadzovanie kódu. Na druhej strane pre CC65 compiler je zas dôležité aby som __fastcall__ nedefinoval.
Finta je v tom, že keď dám kompilovať program a cez parameter -t (target platform) podhodím atari, compiler si zadefinuje direktívu __ATARI__. To je fasa, pretože túto direktívu v IDE nasetovanú nemám, takže som to vyriešil takýmto code snippetom, ktorý treba vložiť úplne navrch main.c, ešte pred includes:

#ifndef __ATARI__
#define __fastcall__
#endif

V podstate sa to potom zaspráva tak, že prekompiler zadefinuje __fastcall__ a kompiler ho nezadefinuje. Savenem teda môj main.c, pustím Build, naštarujem emulátor…

Tarirariráá, fičí to!

Tááákže príbeh o kompilátore CC65 a IDEčkach sa úspešne končí, to ale neznamená, že na mňa niečo,o čom by som mal napísať, počas používania nevybehne. Samozrejme, že sa potom podelím o dojmy tu na blogu.

Na záver ešte toľko, že chystám príspevok, kde bude popis a screenshoty ako nastaviť Microsoft Visual C++ Express 2010 pre CC65, nech si to môže niekto skúsiť bez veľkého bádania, ktorým som musel prejsť ja.

CC65 v prostredí NetBeans resp. MS Visual Studio – časť 1

Nedávno som sa dozvedel, že existuje šikovný Cčkový crosscompiler na Atari, tak mi to nedalo a povedal som si, že […]

CC65 a Atari

Ako som písal v predošlých článkoch ohľadom CC65 C-čkového kompilátora pre Atari, tu je spomínaný návod ako to celé rozbehať. […]

3 thoughts on “CC65 v prostredí NetBeans resp. MS Visual Studio – časť 2

  1. V konfiguraci projektu da sa pridat nekde define’y, pouzivane pri kompilac- na priklad __ATARI__. Okrem toho da sa asi nastavit directories, kde kompilator hlada hlavickove subory. Mozno to tiez umoznuje lepse autocomplete.

  2. Skusim teda po slovensky :). Autocomplete nebude fungovat ked zadam prepocessor definition __ATARI__, pretoze ta podmienka ifndef nebude splnena a tym zase obnovim problem s __fastcall__. Samozrejme directories pre hlavickove subory musia byt nastavene.

Leave a Reply

Your email address will not be published. Required fields are marked *