home *** CD-ROM | disk | FTP | other *** search
/ Flop Magazin 44 / Flop_Magazin_44_2001_01_Raster_cs_Side_B.atr / cc65.cap < prev    next >
Text File  |  2023-02-26  |  8KB  |  1 lines

  1. ¢  cc65 - C crosscompiler¢  ======================¢  Ji@) Svoboda¢¢  Za'alo to nevinn%. Jednoho dne se v na&) prost%jovsk[ konferenci objevil e-mail od Radka ③t%rby s jedinou kr*tkou pozn*mkou ve smyslu "O tomhle jsme se bavili ve ZBAKu" ╱co( u( je ofici*ln) term)n pro sch+zky Atariklubu, konan[ u Zdeka Buriana; j* tam tentokr*t nebyl$ a link vedouc) na http://www.cc65.org. Tam jsou domovsk[ str*nky programu, nad jeho( neexistenc) jsem si d@)ve ji( n%kolikr*t posteskl a proto(e jsem ani nep@edpokl*dal, (e by snad mohl existovat, nikdy mne nenapadlo jej hledat.¢¢¢  O co jde?¢  ---------¢  Jde o voln% &i@iteln` k@)(ov` kompil*tor jazyka C pro stroje postaven[ na procesorech 6502.¢  Term)n k@)(ov` kompil*tor - crosscompiler - vyjad@uje, (e kompil*tor generuje kd pro odli&nou platformu ╱typicky jin` CPU$, ne( na kter[ s*m b%(). Pro n*s to prakticky znamen* mo(nost programovat v jazyce C pro na&e mal[ Atari, ale vyu()t p@itom v&ech v`hod, kter[ sk`taj) daleko modern%j&) stroje. P)&ete sv+j program v komfortn%j&)m prost@ed) modern%j&)ho po')ta'e, p@)mo tam jej p@ekl*d*te ╱je to rychl[, p@i chyb*ch nemus)te neust*le znovu nahr*vat jednotliv[ '*sti syst[mu - editor, p@eklada', linker, ... z diskety 'i ramdisku$ a a( v`sledn` kd p@enesete na mal[ Atari, kde jej spust)te. Samoz@ejm% si jej nap@ed m+(ete vyzkou&et v emul*toru.¢¢¢  M+j prvn) pokus¢  ---------------¢  V roce 1994 jsem pro magaz)n FLOP, p@esn%ji pro kurz jazyka C v tomto magaz)nu, napsal krati'kou textovku v jazyce C. Jmenovala se DUUM. Byla naps*na ve standardn)m C a d)ky tomu jsem ji beze zm%n postupn% ]sp%&n% p@elo(il pro Amigu, Atari ST i PC ╱OS Microsoftu i Linux$. Na mal[m Atari jsme tehdy pou()vali Deep Blue C, ov&em to na p@eklad nesta'ilo. Pokud si dob@e pamatuji, probl[my tehdy byly s absenc) struktur. Se Zdekem Burianem jsme tehdy zkou&eli je&t% jeden p@eklada', ten struktury um%l, ale zase nebyl dostatek pam%ti pro p@eklad tak "rozs*hl[ho" programu.¢  V cc65 se sice prvn) p@eklad nezda@il ╱musel jsem odstranit lom)tka, kter* umo(uj) pokra'ovan) logick[ho @*dku na dal&)m fyzick[m @*dku$, ale ji( druh` p@eklad prob%hl bez chyby a z)skal jsem funk'n) aplikaci pro mal[ Atari. P@)jemn`m p@ekvapen)m bylo, (e zat)mco zdrojov` kd m%l cca. 10kB, v`sledn` kd byla cca. o 1kB men&).¢¢¢  Kde se to vzalo?¢  ----------------¢  cc65 je kompil*tor jazyka C, p+vodn% p@izp+soben` pro po')ta'e Atari Johnem R. Dunningem. Je to n*sledn)k jazyka Small C s n%kolika roz&)@en)mi a odstran%n`mi n%kter`mi limity.¢  Proto(e u n*s ve ZBAKu vznikly okolo p+vodu tohoto programu drobn[ nejasnosti, opakuji, (e tento kompil*tor JE p+vodn% program pro mal[ Atari a JE tak tak[ st*le k dispozici. Je to nav)c onen tajemn`, v p@edchoz)m odstavci zm)n%n` "je&t% jeden p@eklada'".¢¢¢  Co to ╱ne$um)?¢  --------------¢  Kompil*tor je t[m%@ ISO C kompatibiln), z jeho omezen) vyb)r*m:¢  - modifik*tory "const" a "volatile" jsou dostupn[, ale nic ned%laj)¢  - datov[ typy "float" a "double" nejsou dostupn[¢  - inicializace lok*ln)ch prom%nn`ch je mo(n* pouze pro skal*rn) datov[ typy ╱tj. ne pole a struktury$¢  - funkce nemohou vracet struktury; p@i@azov*n) struktur je mo(n[¢  - existuj) ur'it[ limity velikosti lok*ln)ch prom%nn`ch; nejsou dostupn[ v&echny operace, pokud velikost lok*ln)ch prom%nn`ch p@ekro') 256 bajt+¢  V z*vislosti na syst[mu, pro kter` je p@eklad prov*d%n, mohou existovat dal&) limity ╱viz. n)(e$.¢  Vlastnost), se kterou je tak[ nutno po')tat, je to, (e kompil*tor neoptimalizuje. Jako v d*vn`ch dob*ch p@i programov*n) na PC mus) program*tor p@em`&let ╱pokud tedy chce produkovat kvalitn) kd$, co jak kompil*tor p@elo(). Prakticky to nap@. znamen* nepou()vat p@i proch*zen) polem b%(n` index ╱kter` se p@i ka(d[m pr+chodu znovu po')t*$, ale vyu()t ukazatele. Rychlost v`sledn[ho kdu se t)m dramaticky zv`&).¢¢¢  Kompil*tor nen) v&echno¢  -----------------------¢  To rozhodn% ne! Pokud se tro&ku zab`v*te programov*n)m, jist% pochop)te, (e by to bylo tro&ku m*lo. Tak(e co v&echno se v bal)ku nach*z)?¢¢  - cc65 - vlastn) p@eklada' jazyka C ╱na jeho v`stupu je zdrojov` kd assembleru$¢  - ca65 - makro assembler¢  - ld65 - linker¢¢  - cl65 - compile and link utility ╱frontend pro cc65, ca65 a ld65$¢¢  - ar65 - archiver ╱pro tvorbu vlastn)ch knihoven funkc)$¢  - da65 - disassembler¢  - od65 - object file dump utility ╱pro z)sk*n) informac) z ✓.o soubor+$¢¢¢  Build ╱sestaven)$¢  -----------------¢  Vlastn) sestaven) v`sledn[ho spustiteln[ho programu prob)h* minim*ln% ve t@ech kroc)ch. V prvn)m kroku p@eklada' cc65 p@elo() zdrojov` kd jazyka C ╱soubor.c$ do zdrojov[ho kdu assembleru ╱soubor.s$, v druh[m assembler tento soubor p@elo() do bin*rn) podoby ╱soubor.o$. V posledn)m kroku linker p@ipoj) k v`sledn[mu kdu na platform% z*visl` spou&t%c) kd ╱v na&em p@)pad% atari.o$ a knihovny ╱z*klad je atari.lib, ale m+(ete m)t i svoje$. T)m je sestaven) hotovo a z)sk*v*me na Atari spustiteln` kd.¢  V grafick[m zn*zorn%n) by to vypadalo takto ╱kompilujeme soubor "hello.c"$:¢¢⇩---------⇩¢| hello.c |¢⇩---------⇩¢     |¢    cc65¢     |¢⇩---------⇩¢| hello.s |¢⇩---------⇩¢     |¢    ca65¢     |¢⇩---------⇩  ⇩---------⇩  ⇩---------⇩¢| hello.o |  | atari.o |  |atari.lib|¢⇩---------⇩  ⇩---------⇩  ⇩---------⇩¢     |            |            |¢    ld65----------⇩------------⇩¢     |¢⇩---------⇩¢|  hello  |¢⇩---------⇩¢¢  Samoz@ejm% je mo(n[ vytvo@it si vlastn) .o soubory ╱t@eba s obr*zky, texty atp.$ a p@ipojit je k programu tak[. Z v)ce soubor+ .o si m+(ete vytvo@it vlastn) knihovnu ╱.lib$.¢¢¢  Nen) to zbyte'n% slo(it[?¢  -------------------------¢  Mo(n* to tak vypad*, ale nikdo po v*s nechce, abyste v&echny kroky prov*d%li ru'n%. Zjednodu&uj)c) mo(nosti jsou hned dv%. Prvn) spo')v* v pou(it) frontendu, programu cl65, kter`m m+(ete v&echny pot@ebn[ kroky ud%lat jedn)m povelem. A druh*? Ti z v*s, kte@) nez+stali pouze ve sv%t% osmibit+, ur'it% zav`sknou. P@)kaz "make" a jeho "Makefile". D%s)c) se u(ivatele mus)m uklidnit, (e p@)slu&n[ "Makefile" je o pozn*n) jednodu&&) ne( t@eba u zdroj*k+ Linuxov[ho kernelu...¢¢¢  Jenom Atari?¢  ------------¢  Ne, Atari nen) jedin` po')ta' s CPU @ady 65xx. Kd tedy m+(eme krom% Atari p@ekl*dat i pro n%kolik po')ta'+ Commodore a po')ta' Apple . I kdy( v&ak byl crosskompiler z p+vodn)ho p@eklada'e p@epracov*v*n pro pou(it) s Commodore 64, tak d)ky tradi'n% skv%l[ pr*ci Atari program*tor+ je podpora File I/O dostupn* pouze pro Atari syst[my. Prakticky to pro ostatn) syst[my znamen* nedostupnost spousty kl)'ov`ch funkc) ╱nap@. printf$ a nutnost obch*zen) t[to slabiny ╱pro v&echny syst[my alespo existuje knihovna conio, kter* @e&) vstup z kl*vesnice a v`stup na obrazovku$. To v`razn% sni(uje pou(itelnost p@eklada'e. Pro m[n% zasv%cen[ zde dopluji, (e to nen) vlastnost 'i chyba p@eklada'e ale jde jen o ╱ne$dostupnost p@)slu&n`ch knihoven. Na&t%st) se to n*s, atarist+, net`k*.¢¢¢  Na 'em m+(u kompilovat?¢  -----------------------¢  Ur'it% na stroj)ch s opera'n)mi syst[my Linux, DOS, Windows, OS/2, FreeBSD, BeOS a Irix. Proto(e je v&ak cel` projekt dostupn` i ve zdrojov`ch kdech, nem%l by b`t probl[m zkompilovat crosscompiler i pro jin[ platformy ╱Atari ST$. Autor ╱auto@i$ s*m uv*d), (e cel` kd je s jedinou v`jimkou ╱funkce access╱$$ 'ist[ ISO C.¢  J* s*m jsem crosscompiler kompiloval ze zdrojov`ch kd+ na sv[m obl)ben[m OS Linux, redak'n) kolega Robert Petru(ela zkou&el hotov[ bin*rky pro Windows.¢¢¢  Na co jsme p@i&li p@i "hran)"¢  -----------------------------¢  Crosscompiler s*m nep@ekl*d* p@)mo do spustiteln[ho kdu, ale jeho v`stupem je zdrojov` kd pro assembler ╱jak bylo zm)n%no v`&e$. Je zaj)mav[ sledovat, jak jsou C konstrukce p@ekl*d*ny, pokud se v*m je poda@) v kdu nal[zt. Nic pro norm*ln) lidi. :-$¢  Tisk znaku "<tady_m*_bejt_vobr*cen`_lom)tko,_kter`_ten_zatrolenej_⇨apek_neum)>b" ╱backspace$ funkc) printf╱$ nen) korektn), m)sto vymaz*n) znaku je vyti&t%n jeden z grafick`ch symbol+.¢  Nen) o&et@en stisk kl*vesy BREAK. Prakticky to znamen*, (e po jej)m stisku procesor n%kam "zabloud)" a to je konec korektn)ho b%hu aplikace. Teoreticky by to m%lo j)t obej)t nastaven)m vektor+ kl*vesy BREAK. P@i nejbli(&) p@)le(itosti to hodl*m vyzkou&et.¢¢¢  Z*v%r? Nem*m r*d z*v%ry.¢  ------------------------¢  Skv%l* v%ci'ka! Opravdu jsem j) nad&en! ③koda jen, (e m% nenapad*, co bych mohl na Atari naprogramovat... Ale n%kte@) z V*s ji ur'it% vyu(ij). Tak(e hur* na http://www.cc65.org...¢